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

时间:2013-08-23 09:26:35

标签: php isset

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

此代码返回1.为什么?

5 个答案:

答案 0 :(得分:7)

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

$string = 'Hello';
echo $string[1];  // echoes 'e'

所以PHP认识到$ a是一个字符串;铸造你的'到数字(转换为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

答案 1 :(得分:2)

仅适用于php 5.3:

所以我们慢慢来吧:

$a['b'];

返回'a',因为b转换为0且$ a [0](0的第一个字符= a)

isset($a['b']);

返回true,因为$ a ['b']是'a'不为空

echo true;

输出“1”,因为true转换为字符串,并且转换为“1”。

答案 2 :(得分:1)

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

像这样使用:

if(isset($a['b']){
echo $a['b'];
}

答案 3 :(得分:0)

出于同样的原因......

echo true;

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

答案 4 :(得分: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