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

jus*_*joe 9 php syntax

我以前从未见过这样的东西.所以,这让我困惑了一段时间.但现在我有时理解并使用它.所以,经过简短的经验,任何人都可以告诉我你的PHP中使用Heredoc Notation的优缺点是什么?

$stringval = <<<MYHEREDOC

   just creating variable here. nothing more.

MYHEREDOC;
Run Code Online (Sandbox Code Playgroud)

就个人而言,你如何使用这个PHP功能?这是一种不好的编码方式还是好方法?

St.*_*son 7

现在有两种类型的"Heredoc:"

  • 类似于引号的Heredoc""会在创建时将任何变量转换为它们的值.这对于在您需要的位置放置精确的间距/返回非常有用(不需要\n或\ t).
  • Nowdoc,类似于单引号''转换任何变量和存储只文本值.这可以在类变量的默认值中使用(与heredoc不同).

Heredoc示例:

$value = 5;
$string = <<<EOL
The number is $value
EOL;
// The number is 5
Run Code Online (Sandbox Code Playgroud)

Nowdoc示例:

$value = 5;
$string = <<<'EOL'
The number is $value
EOL;
// The number is $value
Run Code Online (Sandbox Code Playgroud)

编辑: 我能想到的唯一缺点是结尾字符(在例子中,EOL)必须以0空格开头.在嵌套函数中,这很难记住并且看起来很难看:

function foo() {
  if ($bar) {
    $string = <<<LINE
Hey, how is it going, $name.
This is a great test of Heredoc and Nowdoc.
Blah blah blah, go upvote me!
LINE;
  }
}
Run Code Online (Sandbox Code Playgroud)


cle*_*tus 7

99%的时间我使用它,它用于SQL查询,例如:

$sql = <<<END
SELECT *
FROM sometable
WHERE value > 100
ORDER BY name
END;
Run Code Online (Sandbox Code Playgroud)

我发现在源代码中发现这样的查询更容易,并将它们复制并粘贴到运行它们的东西中.你的旅费可能会改变.注意:您可以使用普通字符串执行多行操作.我倾向于避免这种情况,因为第一行与其他行的缩写不同.

就我而言,最大的"专业人士"是你不需要逃避引用.这特别是标记的问题.决定自己哪个更容易阅读.假设:

$name = 'foo';
$type = 'text';
$value = 'Default value';
Run Code Online (Sandbox Code Playgroud)

版本1:单引号

$html = '<input type="' . $type . ' name="' . $name . '" value="' . $value . '">';
Run Code Online (Sandbox Code Playgroud)

版本2:双引号

$html = "<input type=\"$type\" name=\"$name\" value=\"$value\">";
Run Code Online (Sandbox Code Playgroud)

版本3:heredoc

$html = <<<END
<input type="$type" name="$name" value="$value">
END;
Run Code Online (Sandbox Code Playgroud)

注意:在版本2中,您当然可以使用单引号作为属性值来解决转义问题,但重点是您必须担心这样的事情.我个人不喜欢在标记中混合属性引用类型.