在PHP中使用heredoc的优点是什么,您能举个例子吗?
heredoc语法对我来说更干净,它对于多行字符串和避免引号问题非常有用。以前我用它们来构造SQL查询:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
对我来说,这比使用引号有更低的引入语法错误的可能性:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
";
另一点是避免在字符串中转义双引号:
$x = "The point of the "argument" was to illustrate the use of here documents";
上面的问题是我刚刚介绍的语法错误(缺少转义引号),而不是这里的文档语法:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
这有点风格,但我使用以下规则作为定义字符串的单、双和here文档:
- 单个引号用于字符串为常量时,如
'no variables here'
- 双引号当我可以把字符串放在单行上并需要变量插值或嵌入单引号
"Today is ${user}'s birthday"
- 这里文档用于需要格式化和变量插值的多行字符串。
Heredoc's是一个很好的替代引号字符串,因为它增加了可读性和可维护性。你不需要转义引号,(好的)ide或文本编辑器会使用正确的语法高亮显示。
一个非常的常见示例:在PHP中回显HTML:
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// Sometime later
echo $html;
易于阅读,易于维护。
另一种选择是回显带引号的字符串,它最终包含转义引号,并且ide不会突出显示该语言的语法,这会导致可读性差,并且更难以维护。
Your Common Sense
当然,您不希望看到SQL查询高亮显示为HTML。要使用其他语言,只需更改语法中的语言:
$sql = <<<SQL
SELECT * FROM table
SQL;
一些ide会自动高亮显示heredoc字符串中的代码——这使得在XML或HTML中使用heredoc具有视觉吸引力。
我个人比较喜欢XML的较长部分,因为我不需要关心引号,可以简单地粘贴XML。
首先,所有的原因都是主观的。这更像是一种品味问题,而不是原因。
就我个人而言,我发现heredoc非常无用,偶尔使用它,大多数时候,当我需要将一些HTML放入变量中,而不想为输出缓冲而烦恼时,例如,形成HTML电子邮件消息。
格式不符合一般的缩进规则,但我认为这不是什么大问题。
//some code at it's proper level
$this->body = <<<HERE
heredoc text sticks to the left border
but it seems OK to me.
HERE;
$this->title = "Feedback";
//and so on
对于公认答案中的例子,这只是作弊。
字符串的例子,事实上,如果不作弊的话,会更简洁
$sql = "SELECT * FROM $tablename
WHERE id in [$order_ids_list]
AND product_name = 'widgets'";
$x = 'The point of the "argument" was to illustrate the use of here documents';
我不知道我是否该说这是懒惰。你可以说做任何事情都是懒惰,因为做任何事情总是有更繁琐的方法。
例如,在某些情况下,您可能希望输出带有嵌入变量的文本,而不必从文件中获取并运行模板替换。Heredoc允许您不必转义引号,因此您看到的文本就是您输出的文本。显然有一些缺点,例如,您不能缩进您的heredoc,这在某些情况下可能会令人沮丧,特别是如果您坚持统一语法,我就是。