来自php 5.2.9的isset()的奇怪结果

时间:2011-03-31 18:38:14

标签: php

任何人都可以解释为什么在PHP 5.2.9上这个语句的计算结果为true而不是false?

echo $value = '2010-01-01 12:30:45';
echo "<br>";
echo isset($value['everythingistrue']) ? 'TRUE' : 'FALSE';

3 个答案:

答案 0 :(得分:10)

您无意中访问了字符串中的单个字符(第一个字符),确实已设置。

可以通过数字偏移访问单个字符,因此以下内容可以正常工作

$string = "abc";
echo $string[2], $string[1], $string[0]; // cba

在您的情况下,字符串'everythingistrue'不是有效的字符串偏移量,因此使用正常的字符串到整数规则将其转换为数字:因此它变为0$value[0]已设置(它是第一个字符2),因此isset()调用返回true,导致您的三元操作评估为字符串TRUE

有关详细信息,请查看手册中的String access and modification by character

答案 1 :(得分:4)

$ value是一个字符串。 你可以从这个$ value [0] - 第一个字符,$ value [4] - fift中获取字符。

如果您尝试获取'blablabla'字符,PHP会尝试将其转换为Int并且它会导致0 - 第一个字符为“2”。试试吧 - echo $value['everythingistrue']

答案 2 :(得分:0)

var_dump($value['everythingistrue'])可能会消除您的疑虑