var_dump((int) true); // returns 1
var_dump(true > 0); // returns true
var_dump(true > - 1); // returns false
var_dump(1 > - 1); // returns true
有人可以详细解释一下上面两个结果是什么,因为它将布尔值与整数进行比较,这让我感到困惑。
答案 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