变量连接的单引号或双引号?

ina*_*ina 22 php string quotes concatenation

是否更好地将变量(例如$name)连接到现有字符串(例如$string),如下所示:

$string='Hi, my name is '.$name
Run Code Online (Sandbox Code Playgroud)

或者将变量嵌入字符串中,如下所示:

$string="Hi, my name is $name";
Run Code Online (Sandbox Code Playgroud)

或者使用这样的函数更好:

$string=sprintf("Hi, my name is %s",$name);
Run Code Online (Sandbox Code Playgroud)

哪个在处理器时间/效率方面更好?

Bli*_*izz 25

每个进行测试的人都认为使用单引号在性能方面稍微好一些.最后,单引号只会导致连接,而双引号会强制解释器解析变量的完整字符串.

然而,对于PHP的最新版本而言,这样做的额外负担是如此之小,以至于大多数时候结论是它并不重要.

所以对于表现人来说:使用单引号.对于"我喜欢我的代码可读" - 人:双引号在易读性方面要好得多,正如Flavius Stef已经指出的那样.

编辑:但有一点 - 如果你要在没有变量的字符串中使用一美元,请使用单引号!(http://www.weberdev.com/get_example-3750.html指出解析这些字符串需要4倍的时间)

  • "所有参与测试的人......"数据来源? (8认同)
  • http://classyllama.com/development/php/php-single-vs-double-quotes/ http://www.procata.com/blog/archives/2005/03/08/microbenchmarks-of-single-and- double-qouting/ Here are 2. google 可以给你更多。 (2认同)
  • 如果有*曾经*相关的性能原因,那么现在没有区别 - http://nikic.github.io/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html (2认同)
  • 杜德..认真吗?您不仅要回答超过6年的答案,而且基本上是说完全相同的话。这就是“略胜一筹”的意思:“非常轻微”。 (2认同)

thn*_*nee 11

PHP中单引号和双引号之间的区别在于双引号是"智能"的,因为它们在读取时将解析变量,而单引号是"哑"并且不会尝试解析字符串中的任何字符.

这些导致您可以使用的字符存在一些细微差别; 基本上,使用单引号时唯一需要转义的字符是单引号本身:

'\''
Run Code Online (Sandbox Code Playgroud)

如果你使用双引号,你必须逃避其他字符:

"\$"
Run Code Online (Sandbox Code Playgroud)

但它也允许一些漂亮的东西,比如在最后添加一个新行:

"my string\n"
Run Code Online (Sandbox Code Playgroud)

使用单引号,您必须进行连接:

'my string' . chr(10)
'my string' . "\n"
Run Code Online (Sandbox Code Playgroud)

通常,单引号更快,因为它们是"哑".

但是,通常人们不应该真正担心这些问题,即所谓的过早优化,应该避免.

关于优化的几句话:通常应该首先按照它应该的方式编写程序,然后找到最大的瓶颈并修复那些特定的瓶颈.如果字符串速度在PHP中确实是一个问题,您可能需要考虑切换到另一种语言.

关于速度:您可能希望更多地关注内存使用而不是CPU时间.在这些情况下,CPU时间可以被认为是非常恒定的.编写将迭代多次的算法时,CPU时间更相关.

关于连接:使用点运算符连接字符串越多,您将使用的内存越多.

考虑一下:

$str1 = 'asdf';
$str2 = 'qwer';

// this will result in more memory being allocated for temporary storage
echo $str1 . $str2;

// this will not allocate as much memory as the previous example
echo $str1;
echo $str2;
Run Code Online (Sandbox Code Playgroud)

  • 另一种方式:`echo $ str1,$ str2;` (2认同)

Fla*_*tef 8

我一般认为"Hi, my name is $name"从易读性的角度来看,使用字符串插值()更好.


Tre*_*res 5

对于性能,正如其他人已经证明的那样,使用单引号而不是双引号会略微快一些.

单引号,如果应用于可读性科学并远离主观性,实际上会增加更多的"噪音"."清洁代码"一书中讨论了噪声及其与可读性的关系,人们可以得出结论,你必须看到的非空白越多,它就越妨碍可读性.如果应用于主观性,我花时间阅读的大多数地方实际上更喜欢单引号.

用你的判断.

$var = "My $string with $lots of $replacements."
Run Code Online (Sandbox Code Playgroud)

比以下内容更具可读性:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.';
Run Code Online (Sandbox Code Playgroud)

我承认:

$var = "My string.";
Run Code Online (Sandbox Code Playgroud)

看起来几乎相同:

$var = 'My String.';
Run Code Online (Sandbox Code Playgroud)

然而,后者引入的噪音较少,当周围有很多代码时,每一点都有帮助,更不用说使用单引号带来的其他好处.

最后,我更喜欢KISS.除非您需要双引号,否则请使用单引号.简单的约定,更容易键入,更易于维护,更易于解析和更易于阅读.