PHP 中字串定義與數學運算是基礎中的基礎,但單雙引號行為差異與取模運算(`%`)對浮點數的處理常讓新手困惑。本文詳細解釋這兩個核心概念,並提供實際範例驗證。
| 特性 | 單引號 '...' | 雙引號 "..." |
|---|---|---|
| 變數解析 | 不解析,原樣輸出 | 解析變數與逃逸序列 |
| 逃逸字元 | 僅支援 `\'` 和 `\\` | 支援 `\n`、`\t`、`\$` 等完整序列 |
| 執行效能 | 略快(無解析開銷) | 略慢(需掃描解析) |
| 適用場景 | 純靜態字串、效能敏感場合 | 需內嵌變數、換行等動態字串 |
$name = '小明';
$age = 25;
// 單引號:不解析變數
echo '姓名:$name,年齡:$age';
// 輸出:姓名:$name,年齡:$age
// 雙引號:解析變數
echo "姓名:$name,年齡:$age";
// 輸出:姓名:小明,年齡:25
// 雙引號支援逃逸序列
echo "第一行\n第二行\t縮排";
// 實際換行與 Tab
// 單引號內的單引號需逃逸
echo '它說:\'你好\'';
// 輸出:它說:'你好'
PHP 的取模運算子 `會將操作數轉換為整數 再運算,小數部分直接捨棄(非四捨五入)。這解釋了為何 `7.5 % 3` 與 `7.5 % 3.5` 結果皆為 `1`。
// 7.5 % 3
// 步驟 1:轉整數 → 7 % 3
// 步驟 2:運算 → 7 ÷ 3 = 2 餘 1
// 結果:1
// 7.5 % 3.5
// 步驟 1:轉整數 → 7 % 3
// 步驟 2:運算 → 7 ÷ 3 = 2 餘 1
// 結果:1
// 負數範例
echo -7.5 % 3; // -7 % 3 = -1
echo 7.5 % -3; // 7 % -3 = 1 (PHP 餘數符號跟隨被除數)
若需保留小數精度的餘數運算,請使用 fmod() 函數:
echo fmod(7.5, 3); // 1.5
echo fmod(7.5, 3.5); // 0.5
echo fmod(-7.5, 3); // -1.5
sprintf() 或 Heredoc/Nowdoc 語法。理解 PHP 的型別轉換規則與字串解析機制,能避開許多隱性 Bug,寫出更穩健的程式碼。