相关疑难解决方法(0)

不能用[]进行阅读

在我的一个脚本中,我尝试执行以下操作

$data[] = self::get($row['sr_id']); // <-- line 55
Run Code Online (Sandbox Code Playgroud)

但是,PHP不允许我这样做,给我这个错误

致命错误:不能使用[]在第55行的/file.php中读取

self::get函数返回bool或对象.

编辑: get函数创建一个新对象,再次从mysql数据库加载数据.

php arrays fatal-error

36
推荐指数
2
解决办法
5万
查看次数

PHP自动化

更新:我对此问题的初衷是确定PHP是否确实具有此功能.在答案关注标量问题时,这已经失去了.请改为查看这个新问题:"PHP是否具有自动生成功能?" 这个问题留待这里参考.

根据维基百科,PHP没有自动更新,但此代码有效:

$test['a']['b'] = 1;
$test['a']['c'] = 1;
$test['b']['b'] = 1;
$test['b']['c'] = 1;

var_dump($test);
Run Code Online (Sandbox Code Playgroud)

输出:

array
  'a' => 
    array
      'b' => int 1
      'c' => int 1
  'b' => 
    array
      'b' => int 1
      'c' => int 1
Run Code Online (Sandbox Code Playgroud)

我发现这段代码也有效:

$test['a'][4] = 1;
$test['b'][4]['f'] = 3;
Run Code Online (Sandbox Code Playgroud)

但添加此行会引发警告("警告:不能将标量值用作数组")

$test['a'][4]['f'] = 3;
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么在索引后添加关联元素时它会失败?这是'真正的'Perl式自动更新,还是其中的一些变体,还是其他什么?

编辑:哦,我现在看到标量的错误,哎呀!这些按预期工作:

$test['a'][4]['a'] = 1;
$test['a'][4]['b'] = 2;
$test['a'][5]['c'] = 3;
$test['a'][8]['d'] = 4;
Run Code Online (Sandbox Code Playgroud)

那么,php确实有autovivification?在Google上搜索"php autovivification"并没有提出一个规范的答案或例子.

php autovivification

9
推荐指数
1
解决办法
755
查看次数

标签 统计

php ×2

arrays ×1

autovivification ×1

fatal-error ×1