不能使用 [] 读取
Posted
技术标签:
【中文标题】不能使用 [] 读取【英文标题】:Cannot use [] for reading 【发布时间】:2011-04-18 17:28:44 【问题描述】:在我的一个脚本中,我尝试执行以下操作
$data[] = self::get($row['sr_id']); // <-- line 55
但是,php 不允许我这样做,给我这个 错误
致命错误:无法使用 [] 读取 /file.php 的第 55 行
self::get
函数返回布尔值或对象。
编辑: get 函数创建一个新对象,该对象再次从 mysql 数据库加载数据。
【问题讨论】:
检查 $row 包含的内容 能展示一下周边代码/get方法吗? 尝试找出错误是关于$data[] =
还是关于$row['sr_id']
。
@Eiko: $row['sr_id'] 包含一个整数
按照Flilip Ekberg的建议去做并展示结果。
【参考方案1】:
我的解决方案是这样的:
坏线:$this->$ExtraTag[] = $fullscript;
$this->$ExtraTag[] = $fullscript;
或
$this->ExtraTag[] = $fullscript;
【讨论】:
甜蜜。 $this->$ExtraTag[] = $fullscript 为我工作! 我并不惊讶第一个“坏”行不起作用,最后一行起作用:“坏”行实际上是无效的语法,最后一行是预期的语法。中间示例是将第一个示例变为第三个示例的丑陋解决方法。我建议不要这样做:它不太清晰,不太简洁,性能也较差(因为 PHP 没有预编译器来优化它到第三个示例)。【参考方案2】:旧的 PHP 版本在表达式中接受 $var[]
,允许读取 $var
内容,而不管语法如何。 PHP 5.1 将其设为非法。但有时错误是在预期上下文之外触发的。
所以我的猜测(再次:显示更多代码)是前面的行包含一个未完成的表达式,$data[]
加入了该表达式。
如果是对象属性,您可以将 $data var 包装到
,但这似乎不是您的问题。 (否则第 54 行中的某些内容您没有显示。)右侧无法合理地触发错误。即使数组访问[]
整数或对象也不会触发该致命错误。
因此,如果没有任何帮助,请使用 array_push()
。解决 PHP。
【讨论】:
谢谢,array_push()
函数成功了,现在它可以工作了。 :)
可能是它,或者数组未定义或类型不同,这可能导致此致命错误。 (见下文)。【参考方案3】:
我得到的错误是:
致命错误:无法使用 [] 读取 /pathtosite/drupal/sites/all/themes/zenui/templates/page.tpl.php 在第 33 行
有时问题是当您包含这样的一行时:
$page['sidebar_first'][]
如果您正在复制变量名并忘记注释掉该行,则可能会发生这种情况。
有两个问题:
1.缺少分号
2. $variable[] 必须设置一个变量
解决这两个问题后,我的代码如下:
$page['sidebar_first'][] = $value;
不要忘记注释掉你没有用来帮助调试过程的行
希望这对像我这样的程序员有帮助!
【讨论】:
【参考方案4】:尝试:
$data = Array();
$data[] = self::get($row['sr_id']); // <-- line 55
【讨论】:
不初始化数组不会导致致命错误。 没关系,但如果 $data 以前是对象或 var 则可能 那么你知道它在另一边:self::get($row['sr_id']);什么 var_dump(self::get($row['sr_id']));说? 不初始化数组可以而且确实确实会导致致命错误,包括在简单的表达式中,例如 $arr['key']【参考方案5】:我的脚本遇到了同样的问题,下面一行抛出了同样的错误:
$array[]=$value
我只是把它替换为
$array[count($array)-1]=$value
而且效果很好。
【讨论】:
【参考方案6】:另一个可能的问题是意外的双倍==
。
例如不小心做$myArray[] == $myNewValue;
会导致这个错误(因为你试图用==
读取一个值,而不是告诉PHP 分配一个新的数组索引)。
【讨论】:
【参考方案7】:我有以下相同的错误:
echo implode(',', $array[]);
应该是的
echo implode(',', $array);
希望这可以帮助某人
【讨论】:
以上是关于不能使用 [] 读取的主要内容,如果未能解决你的问题,请参考以下文章