不能使用 [] 读取

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-&gt;$ExtraTag[] = $fullscript;

好线:

$this-&gt;$ExtraTag[] = $fullscript;

$this-&gt;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);

希望这可以帮助某人

【讨论】:

以上是关于不能使用 [] 读取的主要内容,如果未能解决你的问题,请参考以下文章

为啥你不能使用 cat 逐行读取文件,其中每行都有分隔符

为啥我不能从 Golang 正确读取 C 常量?

不能使用互斥锁读取共享数据会导致任意陈旧数据吗?

为啥协议缓冲区 C++ 库不能正确读取二进制对象

为啥 c++ ifstream 不能从设备读取?

@Value可以读取,但@ConfigurationProperties不能