为啥在 PHP (-1 > false) 中返回 true? [复制]

Posted

技术标签:

【中文标题】为啥在 PHP (-1 > false) 中返回 true? [复制]【英文标题】:why in PHP (-1 > false) returns true? [duplicate]为什么在 PHP (-1 > false) 中返回 true? [复制] 【发布时间】:2014-07-03 12:47:13 【问题描述】:

据我所知 false 是 0

if(-1 > false)
    print "Here";

在此代码中,如果返回 true 并打印 here


为什么?

【问题讨论】:

(int)false == 0 我认为 来自文档:WARNING: -1 is considered TRUE, like any other non-zero (whether negative or positive) number!php.net/manual/en/language.types.boolean.php 这有关系吗?没有人写这样的代码。 ***.com/a/138954/1803347 看到这个答案 @KarolyHorvath 很有趣 【参考方案1】:

在这种情况下,-1 被转换为布尔值(true,因为只有0 被视为false)。所以最后的比较是

if (true > false) 
    ...


Type Juggling 可能非常不直观,因此请始终尽量避免比较两种不同类型的变量的情况。在相等比较的情况下,请始终尝试使用身份运算符 (===),在不相等的情况下,您所能做的就是添加手动转换。

另见:http://us3.php.net/manual/en/types.comparisons.php

【讨论】:

【参考方案2】:
 WARNING: -1 is considered TRUE, like any other non-zero 
 (whether negative or positive) number! 

检查这两个代码。你可以得到差异

if(-1 > false)
  print "Here"; //This will print the `Here`

if(-1 > 0)
 print "Here"; // Not print `Here` 

【讨论】:

为什么-1应该被认为是假的??【参考方案3】:

请参阅PHP Comparision Operators - 表与各种类型的比较

Type of Operand 1   Type of Operand 2       Result
bool or null        anything                Convert both sides to bool, FALSE < TRUE

因此,如果您将 bool 与其他任何东西进行比较,那么第二个操作数将被强制转换为 boolean true。 我们在这里也有信息,FALSE &lt; TRUE,您的示例中究竟发生了什么。

【讨论】:

【参考方案4】:

&lt; 是一个数值比较运算符,代码将-1 转换为true 并因此得到结果。

【讨论】:

以上是关于为啥在 PHP (-1 > false) 中返回 true? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

php 编程,使用file_get_contents('http://www.vketch.com/')获取远程页面超时为啥不会返回false

(int)假的;在php中为啥会这样?

为啥 password_verify 返回 false?

为啥 Auth::attempt 在 Laravel 5.3 中总是返回 false?

PHP:为啥 True 是数字而不是数字?

为啥 list.append 在布尔上下文中评估为 false? [复制]