$sql = <<<MySQL_QUERY
这是heredoc语法。你可以通过输入<<<
和自己选择的标记来开始一个heredoc字符串,并且通过在新行上只输入该标记(什么也不加!)来结束它。作为一种便利,有一个例外:你可以在结束定界符后添加一个分号。
例如:
echo <<<HEREDOC
This is a heredoc string.
Newlines and everything else is preserved.
HEREDOC;
echo "This is a heredoc....."
呢? - CodyBugsteinecho
语句中使用双引号,则必须对其进行转义。然而,我很快就停止使用heredoc了,因为我不喜欢为此打破我的缩进模式。现在,我通过形成许多字符串数组来构建我的字符串,然后再使用 implode("\n",$string_array)
连接它们。 - Buttle Butkus这是使用HEREDOC语法的字符串开头。
另一种定界字符串的方法是使用heredoc语法:<<<。
在此运算符之后提供一个标识符,然后是一个换行符。字符串本身紧随其后,然后再次使用相同的标识符来关闭引号。
<<<END Hello "$name"! How is '$spouse' today? END
然而,一个非常麻烦的问题是,END
标记不能有缩进,所以 Heredoc 的内容通常会破坏你代码的缩进。这确实不是 PHP 最重要的功能之一 :) - Pekka这是一个heredoc语法,用于处理长字符串而无需担心引号等问题。如果您注意到单词CHART,然后有一行写着CHART;,那就表示字符串的结尾。
使用这种格式时需要记住的重要事项是,无论您用什么字符串来定义字符串的结尾(例如在本例中的CHART),该单词必须出现在其自己的一行上,后跟一个分号,并且不能在同一行上有任何字符,即使是空格,否则PHP会认为它是字符串的一部分。
我发现在PHP
中,Heredoc
和Nowdoc
都非常强大和有用,我很惊讶迄今没有人给出更多的例子。
首先,Heredoc
和Nowdoc
之间的区别很简单:
Heredoc
:类似于""双引号字符串,可以放置变量Nowdoc
:类似于''单引号字符串,不会解析任何变量为了展示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"
Create small components
<?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
}
?>
或者只需将一个字符串放入,然后使用一个echo输出
<?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
?>
HEREDOC);
应该改为 HEREDOC;
。 - undefined为了更清晰地理解:
$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()
,这需要一些处理。相反,我们可以使用<<<
运算符来节省时间并获得更清晰的代码。 :)