在PHP中使用heredoc的优点是什么?



在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,这在某些情况下可能会令人沮丧,特别是如果您坚持统一语法,我就是。

相关内容

  • 没有找到相关文章

最新更新