-1

我有 3 种不同的行为:

var_dump((int) true); // returns 1

var_dump((int) true && true); // returns true

var_dump((int) (true && true)); // returns 1

为什么?

4

4 回答 4

2

因为先进行强制转换,然后进行 AND 操作,所以你最终得到 1 && true 这是真的

于 2013-04-17T08:16:07.377 回答
1
(int)true && true;

 // same as:
 ((int) true) && true;

 // same as:
 1 && true; // = true
于 2013-04-17T08:17:31.583 回答
1
(int) true

将 TRUE 转换为整数(给出 1)

(int) true && true

将第一个 TRUE 转换为整数(给出 1),然后与第二个 TRUE 进行与运算(将 1 重新转换为布尔值)给出 TRUE

(int) (true && true)

AND TRUE 和 TRUE(给出 TRUE),然后转换为整数(给出 1)

于 2013-04-17T08:17:36.017 回答
1

在第一种情况下,简单的类型转换将起作用

var_dump((int) true); // returns 1

在第二种情况下,第一个参数将首先进行类型转换,然后执行 && 操作,该操作将返回 ... 像往常一样 true

var_dump((int) true && true); // returns true

在第三种情况下,首先执行返回 true 的操作,然后执行类型转换操作,将 true 转换为 1

var_dump((int) (true && true)); // returns 1
于 2013-04-17T08:17:40.333 回答