用单引号在PHP中打印换行符


125

我尝试尽可能多地使用单引号,并且我注意到我不能在单引号中使用\ n。我知道我可以按回车键直接输入换行符,但这会使我的代码缩进。

是否存在一些ASCII字符或我可以键入的东西,当我使用单引号时会产生换行符?


如果有人对适用于浏览器和终端(cli,命令行)的解决方案感兴趣:stackoverflow.com/a/9665253/1923625
Omar Tariq

老实说,没有任何理由不惜一切代价寻求单引号。两种语法都是有原因的。如果你想插变量或转义序列,你应该用双引号故意。要遵循的一个好规则是:始终使用单引号,除非出于充分的理由想要双引号。我的朋友们,这就是一致性。
维克多·施罗德(VictorSchröder)

Answers:


142

不可以,因为单引号甚至会禁止十六进制代码替换。

echo 'Hello, world!' . "\xA";

1
好的,我希望我不必诉诸于此。.谢谢!
马特

是的先生。他在不到10分钟的时间内回答了问题。我不得不等到那时才能接受,然后我才忘记了哈哈。
马特

1
除此之外,还有其他选择吗?我需要用它在preg_replace函数,我不能在使用双引号。
亚历克斯·哈德利

1
那不是正确的推理。这不是因为在PHP中您不能在单引号中表示换行符。就是这样。阅读手册可能会有所帮助:)
2013年

3
@hakre当然,阅读手册可能会有帮助,但值得庆幸的是,StackOverflow是可以方便地准确查找这些答案的地方;)
Frederik Krautwald 2014年

108
echo 'hollow world' . PHP_EOL;

使用常量PHP_EOL,那么它也与操作系统无关。


4
通常,您不应使用PHP_EOL,因为这会使您的代码依赖于正在运行的系统。例如,您的Linux服务器正在与另一台服务器通信,然后您的服务器被Windows取代...不好。
Andreas

25

如果echo要使用浏览器,则可以使用以下<br/>语句:

echo 'Will print a newline<br/>';
echo 'But this wont!';

3
不幸的是,它更多用于终端目的。尽管如此,感谢您的回复。
马特

在纯文本电子邮件中尝试使用此方法;)
Kai Noack

22

仅供参考,可以将换行符插入不带双引号的字符串中:

printf('Please%1$sgive%1$sme%1$snewlines%1$s', PHP_EOL);

如果您对双引号的非理性恐惧无止境,这可能会有用。虽然我担心这种疗法可能比疾病更糟。


不用担心..当您使用单引号时,您只会获得更好的性能,所以我会尝试更多地使用它们而不是..但是,对,这并不是解决此问题的好方法,它的麻烦多于其价值。谢谢。
马特2010年

5
我还没有测试过,但是我敢打赌,使用双引号通常比使用printf或字符串连接更快。
Mikko Rantalainen

并非总是非理性的,双引号可能会出现问题,具体取决于您要执行的操作。 echo 'For example, I want this to spit out php code.\necho $this->stuff;';
David Baucum '16

@DavidBaucum,我知道这是一个旧线程,但是仅供您自己和偶然发现此问题的任何人参考echo "For example, I want this to spit out php code.\necho \$test;";--如您所见,您可以转义变量,从而解决了用双引号描述的问题。
乔什·伍德

9

在PHP中使用单VS双引号有区别

例如:1. echo '$var\n'; 2。echo "$var\n";

  • 在1中,PHP将按原样打印: $var\n
  • 在2中,PHP将必须在内存中搜索位置$var,然后返回该位置的值,而且,它还必须将\ n解析为新的行字符并打印该结果

我们的范围是百万分之一秒,但是性能有所不同。我建议您尽可能使用单引号,即使知道您将无法感知这种性能提升。但是在性能方面我是一个偏执的开发人员。


我为您尝试搜索最佳方法而不是使用双引号解决方案(又称懒惰开发人员解决方案)而称赞。
linuxdev

我知道做你想做的最好的办法:echo'foo',“ \ n”;
linuxdev

3
最快的方法是echo $var + "\n";
横街

2
@Hengjie:你可能是说echo $var . "\n";
Skippy le Grand Gourou

@linuxdev:我看不出这个答案的意义。由于1的输出始终与2的输出不同(即使假设$var='$var'...),所以您不将苹果与橙子进行比较吗?
Skippy le Grand Gourou

8

您可以在单引号中使用的唯一转义序列是单引号本身。

$foo = 'That\'s great';

您可以在用单引号创建的字符串中插入新行的唯一方法是插入文字换行符

$bar = 'That\'s
cheating';

1
与其他答案相比,这是最简单的解决方案。
Kai Noack

5

我想知道为什么没有人添加使用该功能的替代方法chr()

echo 'Hello World!' . chr(10);

或者,如果要重复一百万次,则效率更高:

define('C_NewLine', chr(10));
...
echo 'Hello World!' . C_NewLine;

这避免了连接单引号和双引号字符串的愚蠢的表示法。


1
这似乎是最漂亮,最不掉毛的便携式解决方案IMO。
daraul

3

您可能要考虑使用<<<

例如

<<<VARIABLE
this is some
random text
that I'm typing 
here and I will end it with the 
same word I started it with
VARIABLE

有关更多信息,请访问:http : //php.net/manual/zh/language.types.string.php

顺便说一句-某些编码环境不知道如何处理以上语法。


1
嗯,是的。。。但是我仍然讨厌这样的事实,即变量结尾会破坏代码中的所有缩进...使用HEREDOC语法,我遇到了很多(愚蠢的)错误
Matt

0

不,根据文档,PHP不能在单引号中识别特殊符号。而且没有唯一的理由尽可能使用单引号


使用单引号会使性能略有提高。另外,明确定义何时要替换变量似乎是一个好习惯。
杰克逊·米勒

4
@Jackson 没有任何性能提升。以任何方式。忘记这些幼稚的谣言。不,不要谈论变量,而要谈论特殊序列。如果你想要的任何序列,变量或换行来进行扩展-使用双引号,它的目的。OP拒绝出于其目的使用它是胡说八道。
您的常识

当您想在字符串中插入变量时,绝对没有理由不使用双引号。/n换行符转义符也是如此。它更容易,更清洁,更易读,并且性能损失为零
维克多·施罗德(VictorSchröder)

0

如果您有一个变量:

$your_var = 'declare your var';
echo 'i want to show my var here'.$your_var.'<br>';


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.