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
.
我以为我对 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
.