||、&& 都是短路运算符
短路与 &&
运算方法:
只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
$g = false&& true; // $g 被赋值为 (false && true),结果为 true
只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
$g = true && false; // $g 被赋值为 (true && false),结果为 false
总结:假前真后
短路或 ||
运算方法:
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
$g = false || true; // $g 被赋值为 (false || true),结果为 true
只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
$g = true || false; // $g 被赋值为 (false || true),结果为 true
总结:真前假后
拓展 and 和 or(主要还是看运算符的优先级)
<?php
// 下面的 foo() 不会被调用,因为它们被运算符“短路”了。
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
// "||" 的优先级比 "or" 高
$e = false || true; // $e 被赋值为 (false || true),结果为 true
$f = false or true; // $f 被赋值为 false [Altair注:"=" 的优先级比 "or" 高]
var_dump($e, $f);
// "&&" 的优先级比 "and" 高
$g = true && false; // $g 被赋值为 (true && false),结果为 false
$h = true and false; // $h 被赋值为 true [Altair注:"=" 的优先级比 "and" 高]
var_dump($g, $h);
?>
上例的输出类似于:
bool(true)
bool(false)
bool(false)
bool(true)