PHP isset()函数缺火

PHP isset()函数缺火,php,Php,我对PHP的isset函数有问题。它经常神秘地(对我来说)失火 例如,当我有一个可以是字符串或错误数组的变量时,我尝试使用isset查看该变量是否包含数组的已知索引之一,如下所示: $a = "72"; if(isset($a["ErrorTable"])) echo "YES"; else echo "NO"; 这个坏小子在我的服务器上一路打印“是”。我在Ideone(在线翻译工具,很酷!)上试过了,结果打印出来的不是 我认为这与我们正在使用的PHP版本有关。有人能解释一下吗

我对PHP的isset函数有问题。它经常神秘地(对我来说)失火

例如,当我有一个可以是字符串或错误数组的变量时,我尝试使用isset查看该变量是否包含数组的已知索引之一,如下所示:

$a = "72";
if(isset($a["ErrorTable"]))
    echo "YES";
else
    echo "NO";
这个坏小子在我的服务器上一路打印“是”。我在Ideone(在线翻译工具,很酷!)上试过了,结果打印出来的不是


我认为这与我们正在使用的PHP版本有关。有人能解释一下吗?

$a[0]是引用字符串中第一个字符的一种方式,即值“7”。由于字符串仅由其数值引用,“ErrorTable”被类型转换为int(0)


PHP 5.2.17和5.3.23中就是这种情况,但5.4.15或5.5.0中不是这种情况。请考虑以下代码:

$a = "72";
var_dump( isset($a["ErrorTable"]) );
您正在检查是否设置了
$a[“ErrorTable”]
。PHP首先将任何非数字偏移量转换为
int
,这使得
ErrorTable
等于
0

基本上,你只是在做:

if ( isset($a[0]) ) 
PHP中的字符串可以通过数组访问,并且肯定设置了
$a[0]
,条件将计算为
TRUE

然而,这种奇怪的行为在PHP 5.4.0中得到了修复,for
isset()
表示:

5.4.0——检查字符串的非数字偏移量现在返回FALSE

您的服务器可能正在使用旧版本的PHP,这可以解释为什么它会输出
YES


您可以改为使用:


所有PHP版本的输出都将是
NO

我通常使用空函数,如:

$a = "72";
if(!empty($a["ErrorTable"]))
     echo "YES";
else
     echo "NO";

您使用的是什么版本的php?不客气:@PeeHaa:请将此作为答案发布,以便将来的读者可以在不依赖外部站点的情况下看到它。始终使用括号作为代码块。甚至(特别是)一行。你会在意想不到的情况下感谢我moment@PeeHaa你太棒了。另外,我正在切换到3v4l.org!是否有此信息的phpdoc链接?如果能得到这个问题的完整答案,那就太好了。;)问题是为什么它似乎是从PHP5.0.0开始工作的,而phpdoc说它是从PHP5.4.0开始工作的版本不应该是
>5.4.0
检查字符串的非数字偏移量现在返回FALSE。
。。我不知道。。
$a = "72";
if(!empty($a["ErrorTable"]))
     echo "YES";
else
     echo "NO";