问题 为什么在布尔值上访问数组索引不会引发任何类型的错误?


当我尝试通过该数组中不存在的键访问数组时,php将引发“未定义索引”通知错误。当我尝试对字符串执行相同操作时,会引发“非法字符串偏移”警告。这是一种预期的行为,我知道如何处理它。

但是当我在布尔值或整数值上尝试这个时,没有任何反应:

ini_set('display_errors', 1);
error_reporting(E_ALL);

$var = false;
var_dump($var['test']);

我希望看到一些错误消息,但是 $var['test'] 只是默默地设置为NULL。

那么为什么php允许通过数组键访问布尔值而没有任何迹象表明你做错了什么? 洞“通过数组键访问布尔值”这句话对我来说听起来非常奇怪,但你可以在php中完成。


3081
2017-09-09 00:18


起源

你想要哪个错误信息?
@Dagon我期待一个“未定义的索引”。我想要哪个错误并不重要。我只是想知道为什么根本没有错误信息。 - Samel Vhatargh
实际上我已经测试了这个, $var = 123; 这也发生在整数上 - Ghost


答案:


这很难过,但它是记录在案的行为。

http://php.net/manual/en/language.types.string.php

注意:

使用[]或{}以静默方式访问其他类型的变量(不包括实现适当接口的数组或对象)将返回NULL。


12
2017-09-09 01:15