萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 中 && 與 & 的區別:邏輯運算子 vs 位元運算子

PHP 中 && 和 & 乍看相似,實則屬於完全不同的運算子類別,用途與行為大相逕庭。

1. && - 邏輯 AND 運算子

  • 用途:布林邏輯判斷,「且」關係。
  • 運算對象:布林值(或可轉為布林的值)。
  • 短路特性:左邊為 false 時,右邊不再執行。
  • 回傳:true 或 false。
$a = true; $b = false;
var_dump($a && $b); // bool(false)
var_dump($a && someFunction()); // someFunction() 不會被呼叫

2. & - 位元 AND 運算子

  • 用途:整數位元級運算,對應二進位位元逐位「與」。
  • 運算對象:整數(會自動轉型)。
  • 無短路:兩邊必定都執行。
  • 回傳:整數(位元運算結果)。
// 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
短路是否
回傳型別boolint
優先序低於 &高於 &&

常見錯誤

// 錯誤:想做邏輯判斷卻用了位元運算子
if ($a & $b) { ... } // 若 $a=2(10), $b=1(01) → 0 → false,但語意錯誤

// 正確
if ($a && $b) { ... }

口訣: 雙符號(&&、||)做邏輯判斷;單符號(&、|、^、~)做位元運算。

copyright © 萬盛學電腦網 all rights reserved