Heredoc是PHP處理大型字串(如HTML模板、SQL語句、多行文本)的強大語法結構,常被用於實現視圖與邏輯的初步分離。Nowdoc則是PHP 5.3引入的靜態版本。本文詳細解析兩者語法、差異與最佳應用場景。
<?php
$str = <<<EOT
這裡是字串內容
變數 $var 會被解析
函數呼叫不會執行
EOT;
?>
<<<標識符開始,相同標識符結束(常用EOT、EOF、EOD){$var}或{$obj->method()}包裹,避免歧義傳統寫法(難以維護):
function outputHtml() {
echo "<html>";
echo "<head><title>主頁</title></head>";
echo "<body>主頁內容</body>";
echo "</html>";
}
Heredoc寫法(清晰易讀):
function outputHtml() {
echo <<<EOT
<html>
<head><title>主頁</title></head>
<body>主頁內容</body>
</html>
EOT;
}
$str = <<<'EOT'
這裡的內容「完全不解析」
變數 $var 會原樣輸出
轉義字元 \n 也不會生效
EOT;
關鍵差異:標識符用單引號包裹'EOT',內容視為純字面值,無任何解析與轉義。
| 特性 | Heredoc | Nowdoc |
|---|---|---|
| 語法標識 | <<<EOT | <<<'EOT' |
| 變數解析 | 是 | 否 |
| 轉義字元 | 生效 | 不生效 |
| 行為類比 | 多行雙引號字串 | 多行單引號字串 |
| PHP版本需求 | PHP 4.0+ | PHP 5.3+ |
| 效能 | 動態解析,稍慢 | 靜態字面值,極快 |
\$var轉義變數,或改用Nowdoc(確認環境支援PHP 5.3+){$obj->prop}、{$arr['key']}大括號語法,避免解析錯誤Heredoc/Nowdoc是PHP處理多行字串的原生利器,善用它們能大幅提升程式碼可讀性,減少字串拼接的錯誤風險。