$a = 'a';
echo isset($a['b']);
此代码返回 1。为什么?
字符串字符可以通过它们的偏移量来引用,使用像 $a[0] 这样的语法作为第一个字符,例如
$string = 'Hello';
echo $string[1]; // echoes 'e'
所以 PHP 认识到 $a 是一个字符串;将“b”转换为数字(转换为 0),并尝试在 $a[0] 上测试 isset,这是第一个字符a
尽管如果您启用了错误,它也应该引发非法偏移“b”警告
编辑
$a = 'a';
echo isset($a['b']), PHP_EOL;
echo $a['b'];
PHP 5.3
1
a
PHP 5.4
Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6
a
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
仅适用于 php 5.3:
所以让我们慢慢做吧:
$a['b'];
返回 'a' 因为 b 被转换为 0 和 $a[0] (0 = a 的第一个字符)
isset($a['b']);
返回 true 因为 $a['b'] 是 'a' 而不是 null
echo true;
输出“1”,因为 true 被转换为字符串,而 this 被转换为“1”。
出于同样的原因...
echo true;
PHP 无法回显非字符串/非整数,因此它将 true 转换为 1,将 0 转换为 false。
<?php
$a = 'a';
var_dump($a);
?>
it will gives output string(1) "a"
if you will echo $a['b'] it will give you output as a so $a['b'] also has value
hence
<?php
$a = 'a';
echo isset($a['b']);
?>
outputs value 1