【发布时间】:2011-04-11 15:10:22
【问题描述】:
例如:
$sql = <<<MySQL_QUERY
【问题讨论】:
-
您可以阅读有关Heredoc 语法的 PHP 文档以获得更好的理解。
-
如果您需要解释任何其他符号,this is a good reference
标签: php string operators heredoc
例如:
$sql = <<<MySQL_QUERY
【问题讨论】:
标签: php string operators heredoc
这是 heredoc 语法。您通过将<<< 加上您选择的标记来开始一个heredoc 字符串,并通过仅将标记(而不是其他任何东西!)放在新行上来终止它。为方便起见,有一个例外:您可以在结束分隔符后添加一个分号。
例子:
echo <<<HEREDOC
This is a heredoc string.
Newlines and everything else is preserved.
HEREDOC;
【讨论】:
echo "This is a heredoc....."
echo 语句中使用双引号,则必须转义它们。尽管如此,我在开始后不久就停止使用heredoc,因为我不喜欢为此破坏我的缩进模式。现在我将我的许多字符串形成为数组,稍后implode("\n",$string_array)。
它是使用HEREDOC syntax.的字符串的开头
第三种分隔字符串的方法是 heredoc 语法:
在此运算符之后,提供一个标识符,然后是一个换行符。字符串本身紧随其后,然后再次使用相同的标识符来关闭引号。
【讨论】:
<<<END Hello "$name"! How is '$spouse' today? END 然而,一个巨大的痛苦是,END 标记不能缩进,所以 Heredoc 内容通常会破坏代码的缩进。这确实不是 PHP 最重要的特性之一 :)
【讨论】:
这是一个heredoc,对于长字符串,您不必担心引号之类的。如果您注意到 CHART 一词,然后有一行显示 CHART;,则表示字符串的结尾。
使用这种格式时要记住的重要一点是,无论您使用什么字符串来定义字符串的结尾(例如本例中的 CHART),该单词都必须单独出现在一行上,后跟一个分号, 并且同一行的分号后面不能出现任何字符,甚至是空格,否则 PHP 认为它是字符串的一部分。
【讨论】:
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
【讨论】:
我发现PHP 中的Heredoc 和Nowdoc 都非常强大和有用,我很惊讶到目前为止没有人提供更多关于你可以做什么的例子。
首先Heredoc和Nowdoc的区别很简单,
Heredoc: 就像 "" 双引号字符串你可以放变量
Nowdoc: 就像'' 单引号字符串没有变量被解析
对于以下示例,我将只显示Heredoc,为了制作Nowdoc,只需将令牌包含在单引号内 -> 'TOKEN'。
简单示例
$a = "Hello";
$b = "World";
// HEREDOC
echo <<<HEREDOC
<strong> HEREDOC: </strong>
Variable A: "$a"
Variable B: "$b"
HEREDOC;
echo '</br>';
// NOWDOC
echo <<<'NOWDOC'
<strong> NOWDOC: </strong>
Variable A: "$a"
Variable B: "$b"
NOWDOC;
输出
HEREDOC: Variable A: "Hello" Variable B: "World"
NOWDOC: Variable A: "$a" Variable B: "$b"
<br>这是可行的,因为 HEREDOC 将每个 \n 解释为实际的行
// HEREDOC
echo nl2br(<<<HEREDOC
<strong> HEREDOC: </strong>
Variable A: "$a"
Variable B: "$b"
HEREDOC);
// Output HEREDOC:
//Variable A: "Hello"
//Variable B: "World"
创建小组件
<?php
foreach($tasks as $task) {
// Create an HTML like component
$component = <<<HEREDOC
<div class="pure-u-1-3">
<div class="card">
<div class="card-header">
{$task['name']}
</div>
<div class="card-body">
<h5 class="card-title"> {$task['state']} </h5>
<p class="card-text"> {$task['description']} </p>
<a href="view?model=todo_list&task_id={$task['id']}" class="btn btn-primary">See Task Todos</a>
</div>
</div>
</div>
HEREDOC;
echo $component; // Output
}
?>
或者只输入一个字符串,然后输出 1 个回显
<?php
$taskRendered = '';
foreach($tasks as $task) {
// Create an HTML like component
$component = <<<HEREDOC
<div class="pure-u-1-3">
<div class="card">
<div class="card-header">
{$task['name']}
</div>
<div class="card-body">
<h5 class="card-title"> {$task['state']} </h5>
<p class="card-text"> {$task['description']} </p>
<a href="view?model=todo_list&task_id={$task['id']}" class="btn btn-primary">See Task Todos</a>
</div>
</div>
</div>
HEREDOC;
$taskRendered .= $component;
}
echo $taskRendered; // Output
?>
【讨论】:
要想清楚:
$data = array(
"Id" => 12345,
"Cutomer" => "hi",
"Quantity" => 2,
"Price" => 45
);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
如果我们使用<<<:
$data = <<<DATA
{
"Id": 12345,
"Customer": "John Smith",
"Quantity": 1,
"Price": 10.00
}
DATA;
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
结论:如果我们采用第一种方法,我们必须将其转换为json_encode(),这在某种程度上需要一些处理。相反,我们可以使用<<< 运算符来节省一些时间并获得一些干净的代码。 :)
【讨论】:
<<< 示例肯定不是干净的代码。我不建议任何人使用 heredoc 构造数组数据。