PHP 擁有豐富的運算符體系,掌握優先級與結合性是編寫正確表達式的關鍵。本文整理完整運算符分類與優先級表,並提供實戰避坑指南。
| 分類 | 運算符 | 說明 |
|---|---|---|
| 算術 | + - * / % ** ++ -- | 數學運算 |
| 賦值 | = += -= *= /= %= **= .= | 變量賦值與複合賦值 |
| 比較 | == === != !== < > <= >= <=> | 值比較(太空船運算符 PHP 7+) |
| 邏輯 | && || ! and or xor | 布林邏輯 |
| 位元 | & | ^ ~ << >> | 位級運算 |
| 字串 | . | 字串串接 |
| 陣列 | + == === != !== | 陣列合併/比較 |
| 型別 | instanceof | 物件型別檢查 |
| 三元 | ?: | 條件表達式 |
| 其他 | @ new clone [] , | 錯誤抑制、實例化、陣列構造 |
<?php
$a = 90; $b = 80;
$c = $a > $b ? 12 : 900;
echo $c; // 12
// PHP 7+ 短三元運算符 (Elvis operator)
$name = $user['name'] ?? 'Guest'; // 等同 isset() ? : 'Guest'
?>
<?php
$a = "hello"; $b = ", world!";
$c = $a . $b; // "hello, world!"
$a = "hello"; $b = 100;
$c = $b . $a; // "100hello" (數字自動轉字串)
?>
instanceof<?php
class Dog {}
class Cat {}
$a = new Dog;
var_dump($a instanceof Dog); // bool(true)
var_dump($a instanceof Cat); // bool(false)
?>
| 優先級 | 運算符 | 結合性 |
|---|---|---|
| 1 (最高) | clone new | 無 |
| 2 | [ (array) | 左 |
| 3 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 右 |
| 4 | instanceof | 無 |
| 5 | ! | 右 |
| 6 | * / % | 左 |
| 7 | + - . | 左 |
| 8 | << >> | 左 |
| 9 | < <= > >= <> | 無 |
| 10 | == != === !== | 無 |
| 11 | & | 左 |
| 12 | ^ | 左 |
| 13 | | | 左 |
| 14 | && | 左 |
| 15 | || | 左 |
| 16 | ?? | 左 |
| 17 | ? : | 右 |
| 18 | = += -= *= /= %= .= &= ^= |= <<= >>= | 右 |
| 19 | and | 左 |
| 20 | xor | 左 |
| 21 (最低) | or | 左 |
| - | , | 左 |
$a = $b = 5 從右向左結合;$a + $b . $c 先算 + 再 .&&/|| 優先級高於 and/or,$a = false || true vs $a = false or true 結果不同$a ? $b : $c ? $d : $e 需加括號明確意圖(1 + 5) * 3 = 18 vs 1 + 5 * 3 = 16熟練掌握優先級表,善用括號消除歧義,是寫出可維護 PHP 代碼的基本功。