我有 3 种不同的行为:
var_dump((int) true); // returns 1
var_dump((int) true && true); // returns true
var_dump((int) (true && true)); // returns 1
为什么?
我有 3 种不同的行为:
var_dump((int) true); // returns 1
var_dump((int) true && true); // returns true
var_dump((int) (true && true)); // returns 1
为什么?
因为先进行强制转换,然后进行 AND 操作,所以你最终得到 1 && true 这是真的
(int)true && true;
// same as:
((int) true) && true;
// same as:
1 && true; // = true
(int) true
将 TRUE 转换为整数(给出 1)
(int) true && true
将第一个 TRUE 转换为整数(给出 1),然后与第二个 TRUE 进行与运算(将 1 重新转换为布尔值)给出 TRUE
(int) (true && true)
AND TRUE 和 TRUE(给出 TRUE),然后转换为整数(给出 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