HOWTO · PHP
如何在 PHP 中編寫多行字串
本文介紹瞭如何在 PHP 中編寫多行字串。它包括轉義序列和連線賦值操作符。
本頁內容
在 PHP 中撰寫多行字串,可以用 heredoc 或 nowdoc 表示跨行的原文字,在雙引號字串中加入 \n 或 \r\n,或使用 .= 搭配 PHP_EOL 逐段附加內容。這些方法會在字串中加入換行字元;它們不會控制文字在畫面上的自動換行,實際顯示方式取決於文字呈現的位置。請依變數插值需求及所需的換行慣例選擇合適的方法。
使用 heredoc 或 nowdoc 撰寫多行字串常值
heredoc 和 nowdoc 可讓你將字串分成多行撰寫,不必在每個換行處加入跳脫序列。heredoc 的行為類似雙引號字串,因此 PHP 會插入變數值。nowdoc 的行為類似單引號字串,因此變數名稱會保留為原文字。結尾識別字必須與開頭識別字相同;它本身就是結尾分隔符,且必須符合 PHP 的識別字規則。
執行以下範例:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
<?php
$name = 'Mina';
$message = <<<TEXT
Hello, $name.
Your report is ready.
TEXT;
$template = <<<'TEXT'
Hello, $name.
Your report is ready.
TEXT;
echo $message, PHP_EOL, $template;
heredoc 的值會在 $name 出現的位置帶入 Mina。在 nowdoc 的值中,$name 會保留為文字。兩個值都會在各自的兩行原始碼之間包含換行。若要撰寫含有變數值且易於閱讀的範本,可以使用 heredoc;若內容應保持原樣,則可使用 nowdoc。
使用跳脫序列加入換行
在雙引號字串中,\n 會加入換行字元(line feed)。如果想讓短字串維持在同一行原始碼中,或精確指定換行位置,可以使用這個序列。連續使用兩個 \n,會在文字之間留下一個空白行。單引號字串不會將 \n 解讀為換行,因此這種寫法要使用雙引號。
序列 \r\n 是回車(carriage return)後接換行字元。文字檢視器通常會將這兩個字元一起視為一次換行。回車不代表 PHP 會將文字指標移回左側;它只是字串中的一個字元。如果接收端格式明確要求 CRLF,例如 Windows 格式的文字檔,請使用這個序列。若要依照目前平台的一般慣例換行,請使用下文介紹的 PHP_EOL。
使用串接與 PHP_EOL 建立多行字串
.= 運算子會把右側的值附加到左側的字串。先指定第一段文字,再逐段附加後續內容,並在需要時加入分隔符號。PHP_EOL 會提供執行 PHP 的平台慣用的換行序列。
本節中的程式碼以及顯示的標籤或輸出仍為英文。
<?php
$message = 'First line';
$message .= PHP_EOL . 'Second line';
$message .= PHP_EOL . 'Third line';
echo $message;
依序逐段附加可以讓每一步都更容易閱讀:第一次指定值後,$message 會保存累積的文字,而每次使用 .= 都會在其後附加內容。如果某一段文字應從新的一行開始,請在它前面加入 PHP_EOL。除非接收端需要,否則最後一段不必再加換行符號。
依使用情境選擇換行格式
如果字串會作為一般文字寫入目前平台,而且使用該平台慣用的換行格式合適,請使用 PHP_EOL。它是平台常數,不保證每個接收系統都接受相同的位元組內容。如果通訊協定、檔案格式或外部服務指定使用 LF 或 CRLF,請直接加入指定的換行序列,不要依賴主機平台的格式。
heredoc 和 nowdoc 主要用來選擇如何表示多行字串常值,以及是否插入變數;原始碼中的實際換行也會成為字串內容。短字串或需要精確控制分隔符號時,跳脫序列很方便。如果字串由變數或計算結果組成,串接會更實用。無論使用哪種方式,都要確認目的地的要求:終端機、瀏覽器、文字檔和通訊協定可能會以不同方式顯示或解讀換行。