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

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

4

3 回答 3

3

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


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

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

var_dump(true > 0); // gives true
var_dump(true > -1); // gives false
于 2013-01-09T17:31:44.660 回答
3

>是一个数值比较运算符,因此 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。

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

于 2013-01-09T17:31:57.317 回答
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 之外始终为 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
于 2013-01-09T17:48:11.053 回答