【问题标题】:Why is true greater than 3 in PHP为什么 PHP 中的 true 大于 3
【发布时间】:2012-12-04 21:08:24
【问题描述】:

我想知道为什么 PHP 中的以下语句返回 true?

true>=4

例如这样的行会回显1

echo true>=4;

谁能解释一下这背后的逻辑?

【问题讨论】:

  • 整数 4 在比较之前被转换为布尔类型。所有非零整数都转换为布尔值 TRUE。如果您尝试true >= 0,您会发现这也是正确的,因为true > falsephp.net/manual/en/language.types.boolean.php
  • 关于问题标题“为什么大于 3”的旁注。它不是。它等于 3。当然,问题是指 4。

标签: php types casting


【解决方案1】:

除了 Davids 的回答之外,我还想添加一些内容以提供更多深度。

PHP 与其他编程语言不同,如果您对运算符/语法不小心,您可能会像您遇到的那样陷入棘手的坑洞。

正如大卫所说,

4 也为真(因为它非零),真等于真,所以 它也大于或等于 true。

考虑到这一点 真大于假。

真 = 1

假=0

以这个为例:

$test = 1;
if ($test == true){
echo "This is true"; 
}else{
echo "This is false";
}

上面会输出

这是真的

但如果你接受这个:

$test = 1;
if ($test === true){
echo "This is true"; 
}else{
echo "This is false";
}

上面会输出:

这是假的

添加的等号寻找完全匹配,因此寻找integer 1 而不是 PHP 读取 1 为真。

我知道这有点离题,但只是想解释一下 PHP 包含的一些坑。

希望对您有所帮助

编辑:

回答您的问题:

回声真>=4;

您看到 1 作为输出的原因是因为真/假被解释为数字(见上文)

无论你是在做echo true>=4 还是只是echo true; php 都将true 设为1,false 设为0

【讨论】:

  • +1。我真的很喜欢这个答案。它包括一个很好的解释,扩展了原始问题。它还针对可能是 OP 的初学者。不错!
  • 谢谢,这就是我一直在寻找的东西,我完全忘记了 ===。顺便说一句,我认为您在第二个示例中的意思是“这是错误的”。
  • 并且根据文档 true/false(bool) 不被视为数字,而是将第二个操作数转换为 bool(在这种情况下 4 => true)“转换为 bool,FALSE
【解决方案2】:

4也是true(因为它不为零),而true等于true,所以它也大于等于true

如果将 bool 或 null 与字符串以外的任何内容进行比较,则该内容将转换为 bool。见the docs

【讨论】:

  • 所以数字被转换为布尔值而不是反之亦然......多么神奇的语言......
  • 是的。你说对了。如果将 bool 或 null 与字符串以外的任何内容进行比较,则该内容将转换为 bool。见the docs
  • @JanDvorak 那是你的 PHP!
  • 我看到这个答案得到了很多人的支持,但对我来说它实际上并没有解释为什么......解释来自 cmets;它转换为布尔值。这不应该是答案的一部分吗?
  • @JonathanSpiller:我添加了它。但我无法想象有人不明白我的答案的第一部分是说它是一个布尔值。
猜你喜欢
  • 2020-12-11
  • 2016-09-17
  • 1970-01-01
  • 2011-05-04
  • 2013-01-05
  • 1970-01-01
  • 2013-02-02
  • 2023-03-31
相关资源
最近更新 更多