| 特性 | 單引號 '...' | 雙引號 "..." |
|---|---|---|
| 變量解析 | ❌ 不解析,原樣輸出 | ✅ 解析 $var、{$arr['key']}、{$obj->prop} |
| 轉義序列 | 僅 \'、\\ | 完整支援 \n、\t、\r、\"、\$、\{ 等 |
| 性能 | 略快(無解析開銷) | 極微慢(需掃描解析),實際項目可忽略 |
| 嵌套引號 | 內部可直接寫 " | 內部可直接寫 ' |
字符串必須由**同種引號**包裹開始和結束:
$s1 = 'I am a string in single quotes'; // ✅
$s2 = "I am a string in double quotes"; // ✅
$s3 = "Invalid string'; // ❌ Parse error
$s4 = 'Me neither!"; // ❌ Parse error
$name = 'World';
echo "Hello $name"; // Hello World
echo "Hello {$name}"; // Hello World (推薦加花括號,邊界清晰)
echo "Hello ${name}"; // Hello World
$arr = ['key' => 'value'];
echo "Value: {$arr['key']}"; // Value: value
echo "Value: $arr[key]"; // Value: value (但不推薦,易混淆常量)
class A { public $p = 'prop'; }
$obj = new A();
echo "Prop: {$obj->p}"; // Prop: prop
// 單引號:只認 \' 和 \\
echo 'It\'s OK'; // It's OK
echo 'C:\\Windows'; // C:\Windows
echo '\n'; // 輸出字面 \n (兩字符)
// 雙引號:完整支援
echo "Line1\nLine2"; // 換行
echo "Tab:\tHere"; // 制表符
echo "He said \"Hi\""; // He said "Hi"
echo "Price: \$100"; // Price: $100 (轉義 $ 防止被解析為變量)
echo "{$var}"; // 花括號內 $ 可不轉義
escapeshellarg。<<< 'EOT' (Nowdoc, 如單引號) 或 <<< "EOT" (Heredoc, 如雙引號)。'$var' 輸出字面 $var 而非值。"C:\new" 中 \n 被解析為換行 → 路徑錯誤,**Windows 路徑用單引號或雙反斜槓**。"{$arr[key]}" 若 key 未定義常量會觸發 Notice,應寫 "{$arr['key']}"。掌握引號語義,字符串處理不再出錯。