这只是出于好奇而提出的一个简单问题。我花了一整天的时间调试我的 PHP 代码,发现问题是由于将整数视为数组造成的:
$x = $int[$index]; // this returns null, but no error at all
该整数实际上应该是一个数组,但是本来要传递数组的函数搞砸了,而是传递了数组中的第一个值。有什么原因不显示错误吗?访问数组上未定义的索引会产生错误,但是尝试访问整数上不存在的索引却不会?
我原本以为;它类型转换$int
到一个字符串,因为[]
是访问字符串位置的另一种方法。看起来似乎合理,这不会产生错误:
$string 'Hello';
echo $string[0]; // H
然而,事实并非如此:
$int = 1;
echo $int[0];
不输出任何内容并且var_dump($int[0])
回报NULL
.
有趣的是,同样的行为也表现在bool
and float
使用的操作是FETCH_DIM_R
这是获取“array-value”中“index”处元素的值,并将其存储在“result”中。
来自手册Arrays:
Note:数组取消引用不是标量值的标量值string默默地屈服NULL,即不发出错误消息。
与此类似现象,其中不会产生错误。虫子#68110 and #54556:
$array['a'] = null;
echo $array['a']['non-existent'];
分配不起作用并不奇怪:
$int = 1;
$int[0] = 2;
警告:不能将标量值用作数组
所以PHP实际上是在尝试访问int
, bool
, float
作为数组但不会生成错误。至少是从版本 4.3.0 到 7.2.2。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)