【问题标题】:String compare on a bool布尔值上的字符串比较
【发布时间】:2011-08-21 17:55:35
【问题描述】:

我很确定这是我的新手 PHP 知识中的一个简单的基本缺陷,但是当发生以下情况时我感到很惊讶:

$resultTRUE... 那么为什么它被认为等于字符串“email”?我猜这是因为从技术上讲,它是bool,而且它不是假的?因此,当它与字符串(例如“电子邮件”)进行比较时,它会返回 true。

我应该更改我的方法以将结果返回为包含“true”的string(而不是成功时的return true;),还是我应该这样做?

谢谢。

【问题讨论】:

  • 请粘贴您的代码而不是屏幕截图。
  • @TJ,我发截图的原因是因为它显示了$result的内容,而且它通过了条件测试。此外,它实际上是三行代码。
  • 啊!它不是我的代码违反了编程规则,它只是 PHP!

标签: php conditional boolean-operations


【解决方案1】:

是的,true 等于 (==) 非空字符串。但不完全相同 (===)。

我建议你仔细阅读type comparison table

【讨论】:

  • 不完全正确!空字符串 ("") 和字符串零 ("0") 被视为 FALSE。其他都是真的!
【解决方案2】:

它返回 true 因为 php 会尝试转换一些东西以便能够比较它们。在这种情况下,它可能会尝试将右侧的字符串转换为布尔值,在这种情况下为真。而 true == true 当然是真的。

通过 $result === "email" (triple =) 你告诉 PHP 它不应该进行转换,如果类型不匹配则返回 false。

【讨论】:

    【解决方案3】:

    if($result === "email") 可以解决问题,但我个人绝不会这样做。

    【讨论】:

    • 为什么你永远不会那样做?
    • 我个人会选择 2 个变量。一个用于有效结果,另一个用于先前定义的错误。提高代码可读性,但我认为这纯粹是一种个人编码风格。应该留下这个注释。
    • php.net/manual/en/function.strcmp.php 使用字符串比较函数而不是 ==
    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多