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

在PHP中使用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查询作为HTML。 要使用其他语言,只需在语法中更改语言即可:

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

一些IDE会自动使用heredoc字符串中的代码 – 这使得使用heredoc for xml或html在视觉上吸引人。

我个人喜欢它的更长的部分即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,这可能会在某些情况下令人沮丧,尤其是如果你是一个统一语法的坚持者,我是。