2

为什么会这样

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

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

4

5 回答 5

4

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

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

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

于 2013-03-17T15:11:28.390 回答
1

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

于 2013-03-17T15:07:34.590 回答
0

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

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

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

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

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

于 2013-03-17T15:24:49.547 回答
0

我看了一下php操作员文档..

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

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

于 2013-03-17T15:17:14.507 回答
0

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

以下内容被认为是空的:

""(一个空字符串)

0(0 为整数)

0.0(0 作为浮点数)

"0" (0 作为字符串)

无效的

错误的

array() (一个空数组)

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

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

于 2013-03-17T15:10:14.760 回答