$a = 'a';
echo isset($a['b']);
此代码返回1.为什么?
答案 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)
答案 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