Php 比较运算符类型的杂耍和布尔运算

Php 比较运算符类型的杂耍和布尔运算,php,Php,我一直在阅读PHP文档中关于类型转换和布尔值的内容,但我仍然不明白为什么这个比较结果是正确的。我的[错误]理解告诉我,在下面的if语句中,整数0被认为是FALSE,而作为非空字符串的“a”被认为是TRUE。因此,我希望这个比较能够解析为FALSE==TRUE,并最终解析为FALSE。我弄错了哪一部分 <?php if(0 == "a"){ $result = "TRUE"; }else{

我一直在阅读PHP文档中关于类型转换和布尔值的内容,但我仍然不明白为什么这个比较结果是正确的。我的[错误]理解告诉我,在下面的if语句中,整数0被认为是FALSE,而作为非空字符串的“a”被认为是TRUE。因此,我希望这个比较能够解析为FALSE==TRUE,并最终解析为FALSE。我弄错了哪一部分

   <?php
            if(0 == "a"){
                    $result = "TRUE";
            }else{
                    $result = "FALSE";
            }

            //$result == "TRUE"
    ?>

当PHP进行字符串整数比较时,它会尝试以智能方式将字符串转换为数字。假设是,如果您有一个字符串“42”,那么您希望将值42与另一个整数进行比较。如果字符串不以数字开头,则其值为零

发件人:

该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,则将使用该值。否则,该值将为0(零)


在中也可以推断出这种行为(请看第一个示例中的第一行)。

您的错误是假定
运算符==
在比较每个操作数之前将其强制为布尔值。它不做这种事


发生的情况是,由于您是,字符串被转换为整数(在本例中),然后执行比较
0==0

如果您使用严格的比较
==
,而不是
=
,它将起作用。严格的比较也会检查变量的类型,因此
0==“a”
将是错误的。

感谢您回答我的问题并帮助我理解。