PHP if condition with boolean



为什么会这样?

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

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

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

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

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

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

这是因为PHP的自动类型转换;并且由于您没有按类型进行比较(===),因此它被认为是TRUE。下面是一个列表,它被认为是空的,但也被认为是FALSE:

以下内容被认为为空:

";"(一个空字符串)

0(0为整数)

0.0(0为浮点数)

"0";(0作为字符串)

array()(空数组)

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

我看了一下php操作符文档。

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

如果您使用===,那么它将考虑数据类型,因此将产生false值

由于您正在将布尔值与字符串进行比较,因此字符串将自动转换为布尔值。

根据php文档,任何不是nullempty(或零)的字符串将被转换为True。

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

如果您使用===运算符,您还检查两个值是否具有相同的类型。

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

最新更新