Php 5.6 为什么PHP heredoc无法保留换行符?
通过: herdoc文本的行为就像一个双引号字符串,没有 双引号 此代码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令牌之后的行上开始,在最后一
<?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
.">";