PHP 是为数组元素设置的,而变量不是数组


PHP isset for an array element while variable is not an array

$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