運算符與控制結構是程序邏輯的骨架。本文詳細解析 PHP 字符串插值規則、各類運算符優先級與特性、分支循環結構用法及常見陷阱。
| 特性 | 雙引號 " " | 單引號 ' ' |
|---|---|---|
| 變量解析 | ✅ 支援 | ❌ 輸出字面量 |
| 轉義字符 | ✅ 解析 (\n, \t, \\, \$...) | ❌ 僅支援 \\ 和 \' |
| 性能 | 略慢 (需解析) | 極快 |
| 中文標點陷阱 | 變量後緊跟中文標點可能解析失敗 | 無此問題 |
<?php
$name = 'Tom';
echo "Hello $name!"; // Hello Tom!
echo 'Hello $name!'; // Hello $name!
echo "Line1\nLine2"; // 實際換行 (源碼可見)
echo 'Line1\nLine2'; // 輸出字面 \n
// 最佳實踐:複雜表達式用 {} 包裹,或改用連接運算符 .
echo "{$user->name}"; // 安全解析對象屬性
echo "Value: " . $val; // 性能更優、無歧義
?>
+ - * / % (取模);** (冪,PHP 5.6+)。
=、+= -= *= /= %= .= (字符串連接賦值)。
<?php
$a = 5;
echo ++$a; // 6 (先增後用)
echo $a++; // 6 (先用後增)
echo --$a; // 5
echo $a--; // 5
?>
| 運算符 | 名稱 | 規則 |
|---|---|---|
| == | 等值 | 類型轉換後比較值 |
| === | 全等 | 類型與值皆相同 |
| != / <> | 不等值 | 類型轉換後比較 |
| !== | 不全等 | 類型或值不同 |
| < > <= >= | 大小比較 | 字符串按 ASCII 碼比較 |
| <=> | 太空船運算符 (PHP 7+) | 返回 -1, 0, 1 表示小於、等於、大於 |
經典陷阱:'abc' == 0 // true (字符串轉數字為 0),嚴格建議使用 === / !==。
&& (AND)、|| (OR)、! (NOT) —— 高優先級。
and、or、xor —— 低優先級 (低於賦值)。
<?php
// 經典陷阱
$result = false || true; // true
$result = false or true; // false! 因為 'or' 優先級低於 '='
?>
建議:統一使用 && || !,避免優先級陷阱。
<?php
// 三元
$status = $age >= 18 ? 'adult' : 'minor';
// 簡寫 (Elvis operator, PHP 5.3+)
$name = $inputName ?: 'Guest'; // 等同 $inputName ? $inputName : 'Guest'
// Null 合並 (PHP 7+)
$username = $_GET['user'] ?? 'Anonymous'; // 變量存在且非 null 則用其值
?>
@expression 抑制表達式產生的錯誤信息 (不含致命錯誤)。慎用,會隱藏真實問題,影響性能。
<?php
if ($score >= 90) { $grade = 'A'; }
elseif ($score >= 80) { $grade = 'B'; }
else { $grade = 'C'; }
// 替代語法 (模板中常用)
if ($cond):
// ...
elseif ($cond2):
// ...
else:
// ...
endif;
?>
<?php
switch ($role) {
case 'admin': echo 'Admin'; break;
case 'user': echo 'User'; break;
default: echo 'Guest';
}
// 注意:case 比較使用 == (鬆散比較),需注意類型轉換
// PHP 8+ 可用 match 表達式 (嚴格比較、返回值)
?>
| 結構 | 特點 | 適用場景 |
|---|---|---|
| while | 先判斷後執行 | 次數未知 |
| do-while | 先執行後判斷 (至少一次) | 菜單交互、至少一次處理 |
| for | 初始化、條件、迭代一體 | 已知次數、計數器需求 |
| foreach | 專為陣列/對象遍歷 | 遍歷集合 (首選) |
break:終止當前循環/ switch,繼續執行後續代碼。continue:跳過本次循環剩餘部分,進入下一次迭代。break/continue N:跳出 N 層嵌套循環。exit/die:立即終止腳本執行。return:在函數中返回值並結束函數;在全局腳本中終止執行 (同 exit)。熟練掌握運算符優先級與控制流最佳實踐,是編寫高質量 PHP 代碼的關鍵一步。