【问题标题】:PHP if condition with boolean [duplicate]PHP if条件与布尔值[重复]
【发布时间】:2013-03-05 22:20:31
【问题描述】:

为什么这是happen?

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

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

【问题讨论】:

标签: php


【解决方案1】:

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

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

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

【讨论】:

  • 好吧,我觉得这很愚蠢,但事实就是如此,所以现在让我们顺其自然吧。
  • 你好,每次去 SO 时都想学点东西!
  • 当然我很好:D。只是我发现它背后的逻辑很愚蠢:P。无论如何谢谢。
【解决方案2】:

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

【讨论】:

【解决方案3】:

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

以下的东西被认为是空的:

“”(一个空字符串)

0(0为整数)

0.0(0 为浮点数)

“0”(0作为字符串)

空

错误

array()(一个空数组)

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

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

【讨论】:

  • 有时我会问自己为什么还要打扰...
  • @Shomz 呵呵,确实很苛刻。猜猜在错误的日子问错了问题。
  • 其他一切都被认为是正确的说法是正确的,但我会说它让人们感到困惑,这就是投票否决的原因。在评估时应该说,'whatever string' == true 或 true == 'whatever string',结果将始终为 true。这就像说if ('some string') 除非字符串为空...或'0'...,否则将评估为真。只是在你的答案更清楚。
  • @zgr024 ... 或者除非字符串为“0”(我是否应该为此投反对票?)。这就是为什么它说基本上,这样任何有逻辑感的人都无法从字面上理解......
  • 我不是在购买声望点...所以随心所欲。
【解决方案4】:

我看了一下 php operator 文档..

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

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

【讨论】:

【解决方案5】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-07-29
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2018-01-17
    • 2021-08-03
    • 2019-06-30
    相关资源
    最近更新 更多