PHP是数组元素,而变量不是数组

Edd*_*die 3 php isset

$a = 'a';
echo isset($a['b']);
Run Code Online (Sandbox Code Playgroud)

此代码返回1.为什么?

Mar*_*ker 7

字符串字符可以通过它们的偏移量使用类似$ a [0]的语法来引用第一个字符,例如

$string = 'Hello';
echo $string[1];  // echoes 'e'
Run Code Online (Sandbox Code Playgroud)

所以PHP认识到$ a是一个字符串; 将'b'转换为数字(转换为0),并尝试在$ a [0]上测试isset,这是第一个字符a

如果您启用了错误,它也应该抛出非法的偏移'b'警告

编辑

$a = 'a';
echo isset($a['b']), PHP_EOL;
echo $a['b'];
Run Code Online (Sandbox Code Playgroud)

PHP 5.3

1
a
Run Code Online (Sandbox Code Playgroud)

PHP 5.4

Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6
a
Run Code Online (Sandbox Code Playgroud)

PHP 5.5

PHP Warning:  Illegal string offset 'b' in /Projects/test/a10.php on line 6

Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6
a
Run Code Online (Sandbox Code Playgroud)