Answers:
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";
上面的pProblem是我刚才介绍的语法错误(缺少的转义引号),与此处的文档语法相反:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
这有点风格,但是我将以下内容用作定义字符串的单,双和此处文档的规则:
'no variables here'
"Today is ${user}'s birthday"
--ansi
兼容模式下运行的情况。SQL字符串必须使用单引号。
SELECT * FROM "order" WHERE "table"='1'
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;
首先,所有原因都是主观的。这更像是口味问题,而不是原因。
就我个人而言,我发现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';