PHP比较布尔值和整数

时间:2013-01-09 17:29:19

标签: php integer boolean

var_dump((int) true); // returns 1
var_dump(true > 0);  // returns true
var_dump(true > - 1); // returns false
var_dump(1 > - 1); // returns true

有人可以详细解释一下上面两个结果是什么,因为它将布尔值与整数进行比较,这让我感到困惑。

3 个答案:

答案 0 :(得分:3)

由于OP改变了问题,这个答案不再满足这个问题。


您通常不应该比较不同类型的操作数,如果您有一些代码执行此操作可能存在错误。结果可能没有多大意义。

如果你想知道答案,试试吧:

var_dump(true > 0); // gives true
var_dump(true > -1); // gives false

答案 1 :(得分:3)

>是一个数值比较运算符,因此PHP执行"loose comparison"并在每种情况下将true转换为1或-1。

我想以下内容正在发生:

当您询问是否(true > 0)时,PHP首先松散地测试true==0是否返回false,然后将{1}替换为true并且比较返回true。

当您询问是否(true > -1)时,PHP首先松散地测试true==-1是否返回true,这意味着(true > -1)必须为false。

简而言之:不要做这样的事情。

答案 2 :(得分:1)

我通过考虑Blazemonger编写的内容,弄清楚这里发生了什么。 考虑一下:

var_dump(true == 0); // returns false
var_dump(true == 1); // true
var_dump(true == -1); // true
var_dump(true == -2); // true

如此真实就是零。

对于>运算符,PHP首先测试相等(==),所以 true == X除X = 0外总是为真。 如果比较结果为真,那么它不能更大,所以如此真实>除X = 0外,X始终为假。

因此:

var_dump(true > 0); // true
var_dump(true > 1); // false
var_dump(true > -1); // false
var_dump(true > -2); // false