在PHP中使用Heredoc有什么好处?

时间:2011-04-15 06:48:15

标签: php heredoc

在PHP中使用Heredoc有什么好处,你能举例说明吗?

5 个答案:

答案 0 :(得分:202)

这里的doc语法对我来说更清晰,它对多行字符串和避免引用问题非常有用。在那天我曾经使用它们构建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"
  • 此处需要格式化和变量插值的多行字符串的文档。

答案 1 :(得分:64)

由于可读性和可维护性的提高,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;

答案 2 :(得分:7)

某些IDE会自动突出显示heredoc字符串中的代码 - 这使得使用heredoc对XML或HTML进行视觉上的吸引力。

我个人喜欢使用XML的较长部分,因为我不必关心引用字符,只需粘贴XML即可。

答案 3 :(得分:5)

首先,所有原因都是主观的。 这更像是品味而不是理由。

就我个人而言,我发现heredoc非常无用并偶尔使用它,大部分时间我需要将一些HTML放入变量并且不想打扰输出缓冲,例如形成HTML电子邮件消息。 / p>

格式化不适合一般缩进规则,但我认为这不是什么大问题。

       //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';

答案 4 :(得分:3)

我不知道我是否会说heredoc是懒惰,可以说做任何事情都是懒惰,因为总是有更繁琐的方法可以做任何事情。

例如,在某些情况下,您可能希望输出带有嵌入变量的文本,而无需从文件中获取并运行模板替换。 Heredoc允许您放弃必须转义引号,因此您看到的文本是您输出的文本。显然有一些负面因素,例如,你不能缩进你的heredoc,这在某些情况下会令人沮丧,特别是如果你是统一语法的坚持者,我就是这样。