在PHP中使用heredoc的优势是什么,能举个例子吗?


当前回答

一些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,这在某些情况下会令人沮丧,特别是如果你是一个统一语法的坚持者,就像我一样。

由于提高了可读性和可维护性,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不会突出显示该语言的语法,这导致可读性差,维护更困难。

你的常识更新了答案

当然,您不希望看到SQL查询高亮显示为HTML。要使用其他语言,只需在语法中更改语言:

$sql = <<<SQL
       SELECT * FROM table
SQL;

对我来说,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' 双引号当我可以把字符串放在单行上,需要变量插值或嵌入单引号“今天是${user}的生日” 这里是需要格式化和变量插值的多行字符串的文档。

一些ide会自动突出显示heredoc字符串中的代码——这使得在XML或HTML中使用heredoc在视觉上很吸引人。

我个人喜欢它的较长部分,即XML,因为我不需要关心引号字符,可以简单地粘贴XML。