我认为我知道关于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测试。
答案 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
的不存在的值。