Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 5.6 为什么PHP heredoc无法保留换行符?_Php 5.6 - Fatal编程技术网

Php 5.6 为什么PHP heredoc无法保留换行符?

Php 5.6 为什么PHP heredoc无法保留换行符?,php-5.6,Php 5.6,通过: herdoc文本的行为就像一个双引号字符串,没有 双引号 此代码 <?php echo "dc:<"." ".">"; echo "hd:<".<<<EOD EOD .">"; 我对此进行了实验,我认为我可以做出有根据的猜测 在双引号字符串部分有3个换行:一个从第2行到第3行,一个从第3行到第4行,还有一个从第4行到第5行 在heredoc部分中,您只有一个换行符。我认为heredoc部分在第一个EOD令牌之后的行上开始,在最后一

通过:

herdoc文本的行为就像一个双引号字符串,没有 双引号

此代码

<?php
echo "dc:<"."


".">";
echo "hd:<".<<<EOD


EOD
.">";

我对此进行了实验,我认为我可以做出有根据的猜测

在双引号字符串部分有3个换行:一个从第2行到第3行,一个从第3行到第4行,还有一个从第4行到第5行


在heredoc部分中,您只有一个换行符。我认为heredoc部分在第一个EOD令牌之后的行上开始,在最后一个EOD令牌之前的行上结束。因此,在herdoc中,从第7行到第8行只有一个换行符,您可以在输出中看到这一点(末尾的
之间的换行符)如果您向heredoc部分添加更多新行,那么您将在输出中看到它们。

希望这将有助于说明:

<?php
echo "dc:<"."          <-- first newline
                       <-- second newline
                       <-- third newline
".">";
echo "hd:<".<<<EOD     <-- heredoc starts after this part
                       <-- only one newline here
                       <-- heredoc ends here so this newline doesn't count
EOD
.">";

“在heredoc部分中,您只有一个换行。”我有三个。“我认为heredoc部分开始于第一个EOD令牌之后的行,结束于最后一个EOD令牌之前的行”否。请参阅我发布的文档报价。“如果您向heredoc部分添加更多新行,则您将在输出中看到它们。”是的,但我的输出仍然有错误数量的新行。该报价为:“herdoc文本的行为就像一个双引号字符串,没有双引号。“嗨@ChrisJJ,我在回答中添加了对您评论的回应。我希望它们能对你有所帮助。我认为你的“双引号字符串部分结构如下”,将空行移到双引号之外,这是一个很好的助记方法,可以帮助你解决heredoc换行失败的问题。但我认为这并不能使“herdoc文本的行为就像一个双引号字符串,没有双引号。”这是真的。我们所能说的最好的话就是“herdoc文本的行为就像一个双引号字符串,从中删除了任何一个前导和尾随空行,没有双引号”。对不雅事实的不雅描述。
dc:<


>hd:<
>
<?php
echo "dc:<"."          <-- first newline
                       <-- second newline
                       <-- third newline
".">";
echo "hd:<".<<<EOD     <-- heredoc starts after this part
                       <-- only one newline here
                       <-- heredoc ends here so this newline doesn't count
EOD
.">";
<?php
echo 'dc:<'.
"
"
.'>';
echo "hd:<".<<<EOD


EOD
.">";