PHP如果条件有布尔值

时间:2013-03-17 15:06:21

标签: php

为什么这个happen

<?php $result = true ;
    if($result == 'SOME TEXT')
        echo 'why is this true? why is this printed?';        
    else
        echo 'when this should be printed?'
?>

请解释一下,我不是在寻找替代方法。

5 个答案:

答案 0 :(得分:4)

在表达式中,您将布尔值与字符串进行比较。该字符串被强制转换为true

参考:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

如前所述,使用===比较值和类型。

答案 1 :(得分:1)

因为您使用==运算符而不是===。 在您的情况下,==不依赖于操作数类型,而不是===

答案 2 :(得分:0)

这是因为PHP的自动类型转换;因为你不是按类型比较(===),所以它被认为是真的。 Here是一个被认为是空的列表,但它也被视为FALSE:

  

以下内容被认为是空的:

     

“”(空字符串)

     

0(0为整数)

     

0.0(0作为浮点数)

     

“0”(0作为字符串)

     

NULL

     

FALSE

     

array()(一个空数组)

     

$变种; (声明的变量,但没有值)

其他一切基本上都被认为是真的。

答案 3 :(得分:0)

我看了一下php运营商文档..

在您的情况下,您使用==说布尔值“true”等于“SOME TEXT”的文本值但不是相同的数据类型。在这种情况下,PHP返回true,因为如果忽略数据类型,只假设它们是相似的。

如果您使用===,则会考虑数据类型,因此会生成false值。

答案 4 :(得分:0)

因为您要将布尔值与字符串进行比较,所以字符串将自动转换为布尔值。

根据PHP文档,任何非nullempty(或零)的字符串都将转换为True。

所以你的比较就像真==真。

如果您使用===运算符,则还要检查两个值是否属于同一类型。

http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting