PHP 提供豐富的運算子,本文聚焦邏輯運算相關的三大類:位運算子、比較運算子、錯誤控制運算子。
位運算子直接操作整數的二進制位元。若兩運算元皆為字串,則操作字元的 ASCII 碼。
| 運算子 | 名稱 | 說明 | 範例 |
|---|---|---|---|
& | 按位與 (AND) | 兩位皆為 1 才為 1 | 5 & 3 = 1 |
| | 按位或 (OR) | 任一位為 1 即為 1 | 5 | 3 = 7 |
^ | 按位異或 (XOR) | 兩位不同才為 1 | 5 ^ 3 = 6 |
~ | 按位非 (NOT) | 0 變 1、1 變 0 | ~5 = -6 |
<< | 左移 | 乘以 2 的 n 次方 | 5 << 1 = 10 |
>> | 右移 | 除以 2 的 n 次方 | 5 >> 1 = 2 |
5 = 0101 (二進制)
3 = 0011 (二進制)
-----------
1 = 0001 (結果)
<?php
$a = 5;
$b = 3;
$c = $a & $b;
echo $c . "<br>"; // 輸出 1
echo 5 & 3; // 輸出 1
?>
提醒:位運算涉及底層二進制,一般業務邏輯較少用到,常見於權限掩碼、顏色運算、資料壓縮等場景。
比較運算子回傳布林值,重點區別 == 與 ===:
| 運算子 | 名稱 | 說明 |
|---|---|---|
== | 等於 | 僅比較值,1 == '1' 為 true |
=== | 全等 | 比較值與型別,1 === '1' 為 false (PHP 4+) |
!= / <> | 不等 | 僅比較值 |
!== | 非全等 | 比較值與型別 (PHP 4+) |
<, >, <=, >= | 大小比較 | 數值或字串比較 |
<?php
var_dump(1 == "1"); // true - 僅比值
var_dump(1 === "1"); // false - 比值又比型別
var_dump(0 == false); // true
var_dump(0 === false); // false
?>
最佳實踐:除非確定需要型別轉換,優先使用 === 與 !==,避免隱性轉換導致邏輯錯誤。
@將 @ 置於表達式前,可抑制該表達式產生的錯誤訊息。
<?php
$file = @file('not_exist.txt') or die("讀取失敗: $php_errormsg");
$value = @$cache[$key]; // 避免未定義索引的 Notice
?>
include、常數等「可取得值」的表達式if、foreach 等控制結構track_errors啟用 track_errors = On 時,錯誤訊息會存入 $php_errormsg,但該變數每次出錯會覆蓋,需儘早檢查。
掌握位運算、嚴格比較、錯誤抑制三類運算子的特性與適用場景,能寫出更健壯、可預測的 PHP 程式碼。日常開發中,比較運算子使用最頻繁,建議養成「嚴格比較優先」的習慣。