$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
菲律宾比索 5.4
Warning: Illegal string offset 'b' in /Projects/test/a10.php on line 6
a
菲律宾比索 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 转换为字符串,而 true 转换为"1"。
因为如果设置了值,ISSET 返回 1。
像这样使用它:
if(isset($a['b']){
echo $a['b'];
}
出于与此相同的原因...
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