PHP 運算子完整讀書筆記:算術、賦值、比較、邏輯、三元、字串、錯誤控制
系統整理 PHP 七大類運算子,含定義、符號、範例、結果說明、優先級提醒與實務建議,適合快速查閱與考試複習。
一、什麼是運算子?
運算子是告訴 PHP 執行特定運算的符號。例如 + 代表加法,= 代表賦值。PHP 運算子按功能分為:算術、賦值、比較、三元、邏輯、字串連接、錯誤控制。
二、算術運算子
| 運算類型 | 符號 | 範例 | 結果 |
| 正號 | + | +$a | $a 轉為數值 |
| 負號(取反) | - | -$a | $a 的負值 |
| 加法 | + | $a + $b | 和 |
| 減法 | - | $a - $b | 差 |
| 乘法 | * | $a * $b | 積 |
| 除法 | / | $a / $b | 商(浮點數) |
| 取餘 | % | $a % $b | 餘數 |
| 冪運算 | ** | $a ** $b | $a 的 $b 次方 (PHP 5.6+) |
三、賦值運算子
| 類型 | 符號 | 範例 | 等價寫法 |
| 基本賦值 | = | $a = $b | 將 $b 值複製給 $a |
| 引用賦值 | =& | $a =& $b | $a 與 $b 指向同一記憶體 |
| 加法賦值 | += | $a += 5 | $a = $a + 5 |
| 減法賦值 | -= | $a -= 5 | $a = $a - 5 |
| 乘法賦值 | *= | $a *= 5 | $a = $a * 5 |
| 除法賦值 | /= | $a /= 5 | $a = $a / 5 |
| 取餘賦值 | %= | $a %= 5 | $a = $a % 5 |
| 串接賦值 | .= | $a .= 'str' | $a = $a . 'str' |
四、比較運算子
| 類型 | 符號 | 範例 | 結果 (true 條件) |
| 小於 | < | $a < $b | $a 小於 $b |
| 大於 | > | $a > $b | $a 大於 $b |
| 小於等於 | <= | $a <= $b | $a ≤ $b |
| 大於等於 | >= | $a >= $b | $a ≥ $b |
| 相等(值) | == | $a == $b | 值相等(經型別轉換) |
| 全等(值+型別) | === | $a === $b | 值相等且型別相同 |
| 不相等 | != / <> | $a != $b | 值不相等 |
| 不全等 | !== | $a !== $b | 值不相等或型別不同 |
| 太空船 | <=> | $a <=> $b | $a<$b→-1, 相等→0, $a>$b→1 (PHP 7+) |
鐵律: 永遠優先使用 ===/!==,避免 "0" == false、null == 0 等隱含轉換陷阱。
五、三元運算子
$result = (expr1) ? (expr2) : (expr3);
// expr1 為 true 回傳 expr2,否則 expr3
// 簡寫:Elvis Operator (PHP 5.3+)
$result = $a ?: $b; // 相當於 $a ? $a : $b
// Null Coalescing (PHP 7+)
$result = $a ?? $b; // $a 存在且非 null 回傳 $a,否則 $b
六、邏輯運算子
| 類型 | 符號 | 範例 | 結果 | 優先級 |
| 邏輯 AND | && | $a && $b | 皆真則真 | 高 |
| 邏輯 AND | and | $a and $b | 皆真則真 | 極低 |
| 邏輯 OR | || | $a || $b | 一真則真 | 高 |
| 邏輯 OR | or | $a or $b | 一真則真 | 極低 |
| 邏輯 XOR | xor | $a xor $b | 單真則真 | 中 |
| 邏輯 NOT | ! | !$a | 真偽互換 | 最高 |
投票類比: && = 全員同意才通過;|| = 一人同意即通過;xor = 僅能有一人同意;! = 否決權。
七、字串連接運算子
| 符號 | 名稱 | 範例 | 結果 |
| . | 連接 | $a . $b | 將 $b 附加到 $a 後 |
| .= | 連接賦值 | $a .= $b | $a = $a . $b |
八、錯誤控制運算子
@ 抑制單一運算式的錯誤訊息(含 Notice、Warning、Error)。
- 範例:
$content = @file_get_contents('missing.txt'); 不會輸出 Warning。
- 若
php.ini 開啟 track_errors = On,錯誤訊息會存入 $php_errormsg(每次覆蓋)。
- 限制: 不屏蔽解析錯誤;不可用於函式/類別定義、
if/foreach 等結構前。
- 最佳實踐: 開發環境禁用 @,讓錯誤暴露;生產環境配置
error_reporting 與日誌記錄,而非靠 @ 掩蓋。
九、運算子優先級速查(高→低)
clone new
** (右結合)
+ - ~ ++ -- (type) @
instanceof
* / %
+ - .
<< >>
< <= > >=
== != === !== <> <=>
&
^
|
&&
||
?? (PHP 7+)
? : (右結合)
= += -= *= /= %= .= &= ^= |= <<= >>= (右結合)
and
xor
or
,