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

时间:2016-08-28 12:02:21

标签: 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?!

有人可以解释一下第4行的结果吗?用php 5.5.36测试。

1 个答案:

答案 0 :(得分:5)

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

换句话说,$foo["a"][0]其中$foo = "hello"$foo[0][0]相同,后者为"h"提供。{/ p>

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