php.net RFC 頻道已經公布了 PHP 7.3 的 Heredoc 和 Nowdoc 語法更新,此次更新專注於代碼可讀性:
Heredoc 和 Nowdoc 有非常嚴格的語法,有些時候這令很多開發者避而遠之,因為他們在代碼中看起來非常丑陋,令代碼的可讀性降低。本次的更新針對此問題,對語法做出了以下兩個更改:
- 支持閉合標記符的縮進;
- 不再強制閉合標記符的換行;
從 PHP 7.2 的當前實現來看, 就像這個簡單的例子:
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
在 7.3 版本中,以下形式是可用的:
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
閉合標記的縮進決定了 heredoc/nowdoc 中每個新行的空格的數量:
<?php
// 4 個縮進空格
echo <<<END
a
b
c
END;
/*
a
b
c
*/
在 PHP 7.2 的當前實現中, 必須存在一個新行來結束 heredoc/nowdoc。 PHP 7.3 移除了這個約束:
<?php
stringManipulator(<<<END
a
b
c
END);
$values = [<<<END
a
b
c
END, 'd e f'];
Heredoc 和 Nowdoc 的背景
Nowdoc 從 PHP 5.3.0 版本開始支持,他和 Heredoc 的不同之處,僅是雙引號和單引號的差別。 Nowdoc 在開始標記周圍添加了單引號,則沒有解析:
<?php
$name = 'Example';
$str = <<<'EOD'
Example of string $name
spanning multiple lines
using nowdoc syntax.
EOD;
上面的 nowdoc 會輸出:
Example of string $name
spanning multiple lines
using nowdoc syntax.
Here 文檔 在 wiki 上的定義:
在計算機學科中,here文檔,又稱作 heredoc、hereis、here-字串或here-腳本,是一個文件輸入或者數據流輸入:可以被當成完整文件的塊狀代碼。它可以保存文字里面的換行或是縮排等空白字元。一些語言允許在字串里執行變量替換和命令替換。
Heredocs 和 Nowdocs 的改進將會讓你的 PHP 代碼更加具有可讀性,錯誤率也會降低。另一方面,因為會閉合標記符的縮進會被移除,所以輸出會更加簡潔直接。
獲取更多信息
推薦閱讀官方的更改文檔 —— flexible Heredoc and Nowdoc Syntaxes RFC。 PHP 官方的文檔 Heredoc 和 Nowdoc。
更多現代化 PHP 知識,請前往 Laravel / PHP 知識社區