PHP 中 && 和 & 乍看相似,實則屬於完全不同的運算子類別,用途與行為大相逕庭。
false 時,右邊不再執行。true 或 false。$a = true; $b = false;
var_dump($a && $b); // bool(false)
var_dump($a && someFunction()); // someFunction() 不會被呼叫
// 5 = 101(二進位), 3 = 011
echo 5 & 3; // 1 (001)
// 實務用途:權限位元遮罩
define('READ', 1); // 001
define('WRITE', 2); // 010
define('EXECUTE',4); // 100
$perm = READ | WRITE; // 3 (011)
if ($perm & READ) { /* 有讀取權限 */ }
| 特性 | && (邏輯 AND) | & (位元 AND) |
|---|---|---|
| 運算層級 | 邏輯層級 | 位元層級 |
| 典型用途 | if ($a && $b) | $flags & MASK |
| 短路 | 是 | 否 |
| 回傳型別 | bool | int |
| 優先序 | 低於 & | 高於 && |
// 錯誤:想做邏輯判斷卻用了位元運算子
if ($a & $b) { ... } // 若 $a=2(10), $b=1(01) → 0 → false,但語意錯誤
// 正確
if ($a && $b) { ... }
口訣: 雙符號(&&、||)做邏輯判斷;單符號(&、|、^、~)做位元運算。