PHP 字串定義可用單引號或雙引號,兩者在變數解析、逸出字元、執行效能上有顯著差異。理解差異能寫出更高效、可維護的程式碼。
| 特性 | 單引號 '...' | 雙引號 "..." |
|---|---|---|
| 變數解析 | 否 | 是 |
| 逸出字元 | 僅 \' \\ | 完整支援 (\n \t \$ 等) |
| 執行速度 | 略快 | 需解析,稍慢 |
| 語法高亮 | 變數不會高亮 | 變數會高亮(IDE 支援) |
<?php
$url = 'https://example.com';
// 單引號:字面輸出
$single = '$url 是字串字面值';
echo $single; // 輸出: $url 是字串字面值
// 雙引號:變數插值
$double = "$url 是變數插值";
echo $double; // 輸出: https://example.com 是變數插值
// 複雜變數需用大括號
$arr = ['name' => 'PHP'];
echo "名稱: {$arr['name']}"; // 正確
echo "名稱: $arr[name]"; // 可行但不推薦(易誤讀)
?>
<?php
$iterations = 1000000;
$str = '測試字串';
// 單引號
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$s = '$str 不解析';
}
echo '單引號: ' . (microtime(true) - $start) . " 秒\n";
// 雙引號
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$s = "$str 解析變數";
}
echo '雙引號: ' . (microtime(true) - $start) . " 秒\n";
// 典型結果差異約 5-15%(視 PHP 版本而定)
?>
$sql = <<'SQL'
SELECT * FROM users
WHERE name = '$name' -- 單引號內不解析
AND status = 1
SQL;
echo 'A', 'B', 'C'; 比 echo 'A' . 'B' . 'C'; 略快(僅限 echo)<<'END') 行為等同單引號選擇引號風格並統一專案規範,比微觀效能優化更重要。