为什么当我把一个空值作为一个这样的数组不PHP不抱怨吗?(Why does PHP not comp

2019-06-25 10:19发布

在PHP中,我已经error_reporting设置报告一切,包括通知。

为什么下面没有抛出任何通知,错误或别的什么吗?

$myarray = null;
$myvalue = $myarray['banana'];

故障排除步骤:

$myarray = array();
$myvalue = $myarray['banana'];
// throws a notice, as expected ✔

$myarray = (array)null;
$myvalue = $myarray['banana'];
// throws a notice, as expected ✔

$myarray = null;
$myvalue = $myarray['banana'];
// no notice or warning thrown, $myvalue is now NULL. ✘ Why?

这有可能是在PHP中的错误,或者我只是不理解一些关于如何工作的。

Answer 1:

有一个活跃的bug报告开始于2006年。

而在文档中,有关此内容的通知字符串部分。



Answer 2:

通常,当你尝试就好像它是另一种类型使用一种类型的值,或者错误或警告被抛出或“式的杂耍”发生。 例如,如果你试图用连接两个数字. ,他们都会得到强制转换为字符串,然后连接起来。

然而,如上解释关于类型杂耍手册页 ,这不是一种治疗非阵列状的阵列时的情况:

自动转换到阵列的行为当前未定义。

在实践中,这种情况发生时,这种“不确定的行为”被提领非数组引发的行为是null被退回,因为你已经观察到的。 这不仅影响空-你还可以得到null ,如果您尝试取消引用一个数字或资源。



Answer 3:

有三种类型,它可能是有效使用数组反引用语法上:

  • 数组
  • 字符串(在给定位置访问的字符)
  • 对象(实现了ArrayAccess接口对象)

对于所有其他类型,PHP仅返回未定义的变量

阵列解除引用由所述处理FETCH_DIM_R操作码 ,它使用zend_fetch_dimension_address_read()以提取元件。

正如你可以看到,有一个空值的特殊情况,并默认情况下,两个返回未定义的变量



文章来源: Why does PHP not complain when I treat a null value as an array like this?
标签: php arrays null