应优先使用&&和||而非and/or,因其优先级高、行为可预测;需警惕短路导致副作用函数不执行;xor需加括号避免优先级错误;!会隐式转换类型,判断明确false或空字符串时应使用===。

&&、||、and、or 时。
为什么 && 和 || 应该是你的默认选择
它们优先级高,行为可预测,和绝大多数其他语言(JavaScript、Python、Java)保持一致。而 and 和 or 优先级低得多,容易在赋值语句中翻车:
-
$a = false || true;→$a是true(符合直觉) -
$a = false or true;→$a是false(因为=比or优先级高,等价于($a = false) or true)
这种差异不是“风格问题”,是实际 bug 的温床。除非你在写非常老的 PHP 代码(如 PHP 4 风格模板),否则别碰 and/or。
&& 和 || 的短路行为必须心里有数
它们不会无脑计算所有操作数,而是按需“停住”:
-
$x && $y():如果$x是 falsy(比如false、0、null、空字符串),$y()根本不执行 -
$x || $y():如果$x是 truthy(比如true、非零数字、非空字符串),$y()同样跳过
这常被用来做安全调用:$user && $user->isAdmin(),避免 Call to a member function on null;但也意味着副作用函数(比如 log_error())可能被跳过,不能依赖它一定执行。
xor 很少用,但真要用时别和 != 混淆
xor 是布尔异或:只在两个操作数真假性不同时返回 true。它不支持短路,且优先级最低(比 and 还低),所以几乎总得加括号:
if (($a > 5) xor ($b === 'test')) { ... }
别写成 $a > 5 xor $b === 'test'——没括号会先算 $a > 5 xor $b,再跟 === 'test' 比,结果错得离谱。另外,!= 对布尔值有时表现像 xor,但对非布尔值(比如 1 != '1' 是 false)行为完全不同,不能替代。
! 的隐式类型转换容易让人掉坑
! 总是把操作数转成布尔值再取反,而 PHP 的“falsy 值”列表比你想象的长:
-
0、0.0、""(空字符串)、null、false、[](空数组)都是 falsy -
"0"是 truthy(字符串非空)→! "0"是false,不是true -
0 == "0"是true,但!0是true,!"0"是false—— 三者逻辑不自洽
所以判断变量是否为“明确的 false”时,别用 !$var,改用 $var === false;判断是否为空字符串,用 $var === '' 或 strlen($var) === 0 更稳妥。
&& 或 || 时,脑子里要快速过一遍:左边表达式有没有副作用?右边会不会因短路被跳过?整个表达式在 falsy/truthy 边界上是否足够健壮?这些细节,比语法本身更决定代码能不能在线上安稳跑下去。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











