PHP - 对于不存在的数组键设置 returns true

PHP - isset returns true for non existing array key

我以为我对 php 了如指掌,直到我碰到这个:

$foo = 'hello';
isset($foo['a']);     // returns false - OK
isset($foo['a']['b']; // returns false - OK
isset($foo['a'][0]);  // returns true! WTF?!

谁能解释一下第 4 行的结果?使用 php 5.5.36.

测试

嗯,这个问题有点误导,因为 isset returns true 对于任何不是 null 的变量。由于 $foo 是一个字符串,而不是数组,因此 $foo["a"] 会给出一个 Illegal string offset 警告。 PHP 假设您打算将 "a" 转换为整数偏移量并隐式执行此操作,将 $foo["a"] 转换为 $foo[0] ,从而为您提供字符串 "h" (字符串的第一个偏移量)。由于 return 值是另一个字符串,因此表达式变为 "h"[0],这又是 "h"

所以换句话说,$foo["a"][0] 其中 $foo = "hello"$foo[0][0] 相同,后者给我们 "h".

但就不存在的数组键而言,isset 肯定会 return false 因为不存在的键会导致不存在的值,这隐含 null.