我最近偶然发现了以下内容:
<? $d=false; var_dump($d[123]); ?>
产生了NULL
,但是(我意外)没有任何通知,例如
<? $d=array(); var_dump($d[123]); ?>
确实产生众所周知的
Notice: Uninitialized string offset: 123 in - on line 1
这里发生了什么?有没有这种行为的文件?
答案 0 :(得分:4)
来自here:
访问其他类型的变量(不包括数组或 使用[]或{}实现适当接口的对象 静默地返回NULL。
答案 1 :(得分:1)
我想这就是你所谓的未定义行为。
这是有道理的,因为布尔值不能有偏移量。
error_reporting(E_ALL);
$d = TRUE;
var_dump($d[0]);
这也会产生NULL
(如果FALSE
被强制转换为空字符串,那么TRUE
将是1
)是有意义的。
加上meze said:)
答案 2 :(得分:1)
快速查看the source code表明这是预期的行为。但不要问我他们为什么这样做......