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

Haw*_*ger 1 php

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

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

sal*_*the 10

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

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

$string = "abc";
echo $string[2], $string[1], $string[0]; // cba
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请查看字符串访问和手册中的字符修改.