PHP - isset对非现有数组键返回true

PGB*_*GBI 1 php php-5.5

我以为我知道关于php的一切,直到我碰到这个:

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

有人能解释一下第4行的结果吗?用PHP 5.5.36测试.

She*_*rif 5

嗯,这个问题有点误导,因为任何变量都没有isset返回.由于是字符串而不是数组,因此会给出非法字符串偏移警告.PHP假设您打算作为整数偏移进行转换并隐式执行,转换为为您提供字符串(字符串的第一个偏移量).由于返回值是表达式变为另一个字符串,这又是一个.truenull$foo$foo["a"]"a"$foo["a"]$foo[0]"h""h"[0]"h"

换句话说,与我们相同的东西$foo["a"][0]在哪里.$foo = "hello"$foo[0][0]"h"

但是对于不存在的数组键,isset肯定会返回,false因为不存在的键导致隐含的不存在的值null.