在PHP中使用heredoc有什么好处,你能举个例子吗?
5 回答
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;
这有点风格,但我使用以下规则作为单、双和此处定义字符串的文档:
- 当字符串是常量时使用单引号,例如
'no variables here'
- 当我可以将字符串放在单行并需要变量插值或嵌入单引号时使用双引号
"Today is ${user}'s birthday"
- 这里是需要格式化和变量插值的多行字符串的文档。
由于提高了可读性和可维护性,Heredoc 是引用字符串的绝佳替代品。您不必转义引号,(好的)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 不会突出显示该语言的语法,这会导致可读性差和维护难度增加。
更新您的常识的答案
当然,您不希望看到突出显示为 HTML 的 SQL 查询。要使用其他语言,只需更改语法中的语言:
$sql = <<<SQL
SELECT * FROM table
SQL;
一些 IDE 会自动突出显示 heredoc 字符串中的代码 - 这使得将 heredoc 用于 XML 或 HTML 具有视觉吸引力。
我个人喜欢它用于 ie 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 允许您放弃转义引号,因此您看到的文本就是您输出的文本。显然有一些负面因素,例如,你不能缩进你的heredoc,这在某些情况下会让人沮丧,特别是如果你是一个统一语法的坚持者,我就是。