首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 單引號與雙引號深度比較:定義、解析、效能與 SQL 實戰

     編輯:PHP 相關知識

核心差異一覽

特性單引號 '...'雙引號 "..."
變數解析否是
跳脫序列僅 \\、\'完整(\n、\t、\$ 等)
解析速度較快(無掃描開銷)稍慢(需掃描變數/跳脫)
適用場景靜態字串、大量輸出需內插變數、換行、Tab

實際輸出對比

<?php
$foo = 2;
echo "foo is $foo";   // foo is 2
echo 'foo is $foo';   // foo is $foo

echo "foo is $foo\n"; // foo is 2 (換行)
echo 'foo is $foo\n'; // foo is $foo\n (字面)
?>

複雜變數內插:花括號語法

<?php
$arr = ['a' => [1,2,3]];
echo "值: {$arr['a'][1]}"; // 正確輸出 2
// echo "值: $arr['a'][1]"; // 語法錯誤或非預期結果
?>

SQL 語句撰寫實戰

問題:單引號衝突

<?php
$name = "O'Reilly";
// 錯誤:SQL 語句中斷
$sql = "INSERT INTO users (name) VALUES ('$name')";
// 正確:跳脫單引號
$sql = "INSERT INTO users (name) VALUES ('" . addslashes($name) . "')";
// 或參數化查詢(PDO 推薦)
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (?)");
$stmt->execute([$name]);
?>

效能微基準測試

<?php
$iter = 1_000_000;
$start = microtime(true);
for ($i=0; $i<$iter; $i++) { $s = 'static string'; }
echo "單引號: " . (microtime(true)-$start) . "s\n";

$start = microtime(true);
for ($i=0; $i<$iter; $i++) { $s = "static string"; }
echo "雙引號: " . (microtime(true)-$start) . "s\n";
// 差異極微(納秒級),實務上可忽略,優先考慮可讀性
?>

最佳實踐建議

  1. 預設使用單引號,除非需要變數內插或跳脫序列
  2. SQL/HTML 模板優先用 Heredoc 或 參數化查詢
  3. 複雜表達式內插務必加花括號 {$expr}
  4. 輸出到 HTML 必經 htmlspecialchars(),與引號選擇無關
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved