var_dump((int) true); // returns 1
var_dump(true > 0); // returns true
var_dump(true > - 1); // returns false
var_dump(1 > - 1); // returns true
有人可以详细解释一下上面这两个的结果是什么,因为它将布尔值与整数进行比较,这让我感到困惑。
这个答案不再满足问题,因为 OP 改变了问题。
您通常不应该比较不同类型的操作数,如果您有一些这样做的代码可能有错误。结果可能没有多大意义。
如果你想知道答案,试试吧:
var_dump(true > 0); // gives true
var_dump(true > -1); // gives false
>
是一个数值比较运算符,因此 PHP 进行“松散比较”并在每种情况下转换true
为 1 或 -1。
我想在内部发生以下情况:
当您询问 if 时(true > 0)
,PHP 首先松散地测试 if true==0
,返回 false,然后用 1 代替true
,比较返回 true。
当你问 if 时(true > -1)
,PHP 首先松散地测试 if true==-1
,返回 true,这意味着(true > -1)
一定是 false。
简而言之:不要做这样的事情。
通过考虑 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 之外始终为 true。如果比较结果为 true,则它不能更大,因此 true > X 始终为 false,除非对于 X = 0。
所以:
var_dump(true > 0); // true
var_dump(true > 1); // false
var_dump(true > -1); // false
var_dump(true > -2); // false