2010-09-29 70 views
27

在我的剧本之一,我尝试做以下无法使用[]读取

$data[] = self::get($row['sr_id']); // <-- line 55 

然而,PHP不允许我这样做,给我这个错误

Fatal error: Cannot use [] for reading in /file.php on line 55

self::get函数返回一个布尔或对象。

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

+2

检查$行包含 – Eiko 2010-09-29 09:23:53

+1

'print_r($ row)' – 2010-09-29 09:25:18

+0

你可以显示周边代码/ get方法吗? – halfdan 2010-09-29 09:30:37

回答

15

老版本的PHP在表达式中接受$var[],允许不管语法的读出$var内容。 PHP 5.1使得这是非法的。但有时候,错误是在默认情况之外触发的。
所以我的猜测(再次显示更多代码)是前面的行包含未完成的表达式,$data[]加入。

在对象属性的情况下,你可以包装你的$ data var到{ },但这似乎不是你的情况的问题。 (否则54行中有东西,你没有显示。)右侧不能合理触发错误。即使是数组访问[]整数或对象也不会触发该致命错误。

所以如果没有什么帮助,只需使用array_push()。解决PHP。

+0

谢谢,'array_push()'函数实现了这个诀窍,现在它可以工作。 :) – eriktm 2010-09-29 18:15:08

+0

可能是这样,或者数组可能是未定义的或不同类型的,这可能会导致这个致命错误。 (见下文)。 – lucian303 2013-06-10 23:51:53

0

尝试:

$data = Array(); 
$data[] = self::get($row['sr_id']); // <-- line 55 
+0

不初始化数组不会导致致命错误。 – 2010-09-29 09:48:17

+0

它没问题,但如果$ data之前是一个对象或变量,它可能会 – sathia 2010-09-29 09:52:04

+0

这不会改变错误 – eriktm 2010-09-29 10:19:47

28

在我的案件的解决方案,这是:

  • 坏线:

$this->$ExtraTag[] = $fullscript;

  • 好线:

$this->{$ExtraTag}[] = $fullscript;

$this->ExtraTag[] = $fullscript;

+0

甜。 $ this - > {$ ExtraTag} [] = $ fullscript为我工作! – FateNuller 2015-06-22 16:01:21

+1

我并不感到惊讶,第一个“坏”行不起作用,最后一行是:“坏”行实际上是无效的语法,最后一行是预期的语法。中间的例子是一个丑陋的解决方法,把第一个例子变成第三个例子。我建议不要这么做:它不那么清晰,简洁,性能较差(因为PHP没有预编译器来优化它到第三个例子)。 – Byson 2017-07-21 13:06:18

0

我得到的错误是:

Fatal error: Cannot use [] for reading in /pathtosite/drupal/sites/all/themes/zenui/templates/page.tpl.php on line 33

有时问题是,当你有这样一行:

$page['sidebar_first'][] 

这可能发生,如果你正在复制一个变量名并忘记注释掉该行。

有两个问题:

1。缺少分号

2. $变量[]必须设置一个变量

修复这两个问题我的代码后读:

$page['sidebar_first'][] = $value; 

不要忘了注释掉行,你不用来帮助调试进程

希望这可以帮助像我这样的程序员!

0

我与我的剧本同样的问题,下面的行抛出了同样的错误:

$array[]=$value 

我只需

$array[count($array)-1]=$value 

取代它,它完美地工作。

0

另一个可能的问题可能是意外双重==。 例如,不小心在做$myArray[] == $myNewValue;会导致这个错误(因为你正试图用==读取一个值,而不是告诉PHP分配一个新的数组索引)。