3
$a = 'a';
echo isset($a['b']);

此代码返回 1。为什么?

4

5 回答 5

7

字符串字符可以通过它们的偏移量来引用,使用像 $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
于 2013-08-23T09:30:45.830 回答
2

仅适用于 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”。

于 2013-08-23T09:36:32.340 回答
1

因为ISSET如果设置了值,则返回 1。

像这样使用它:

if(isset($a['b']){
echo $a['b'];
}
于 2013-08-23T09:28:51.767 回答
0

出于同样的原因...

echo true;

PHP 无法回显非字符串/非整数,因此它将 true 转换为 1,将 0 转换为 false。

于 2013-08-23T09:29:14.350 回答
0
<?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
于 2013-08-23T09:52:37.230 回答