在PHP中,单引号和双引号哪个更快?

8

4
没关系,哪个更快。 - zerkms
1
“要快速,就要做得少。” - Gumbo
这个问题是匆忙提出的,没有进行适当的研究,并且没有解释我的问题背后的原因。它相当古老,似乎正在吸引负面评分。请求删除这个问题是否合适,还是我只能放弃它并接受我提出问题的方式很差这个事实? - cornernote
由于有一些人对您的问题进行了点赞,因此要删除它将会很困难。 - Félix Adriyel Gagnon-Grenier
7个回答

42

我会说单引号更快,因为它们不需要使用Shift键;)

不同的引号在变量输出和转义字符方面有所不同。单引号中的内容按原样处理,没有转义字符和解释变量。双引号会解释变量值并转义特殊字符,例如换行符 (\n)。


17
好的,我会尽力进行翻译。以下是需要翻译的内容:+0 for good answer, +1 for shift key. 良好答案加0分,按Shift键加1分。 - sberry
2
不,只有一个好老式的美式英语键盘。我也喜欢单引号不需要按Shift键的功能。 - Félix Adriyel Gagnon-Grenier

22

取决于你想要做什么。我刚刚进行了一些基准测试,并使用了5个测试用例测试字符串赋值:带有变量的双引号、双引号、双引号和字符串追加、单引号以及带有字符串追加的单引号。

我的测试代码,一百万个循环。字符串赋值。

<?php

$start = microtime(true);

$str = "";

for($i = 0; $i<1000000; $i++)
{
        $str = "hello $i";
}

$end = microtime(true);

echo $end - $start;

结果:

单引号和双引号的字符串(没有变量)速度相同 (每次输出约为0.08秒)。 带有变量连接符的单引号和双引号字符串速度大致相同,但比没有变量的情况要慢 (每次输出约为0.17-0.20秒)。 带有变量的双引号字符串最慢 (每次输出约为0.20-0.25秒)。

因此,单引号和双引号并不真正有区别,但是似乎字符串连接比变量替换更快。


20

如果你每秒要处理数千个字符串,那么你应该关注一下。

如果你想使用字符串插值(包括变量、数学等),请使用双引号。

你还应该尽量保持一致性。

通常情况下,我们不必为小幅度的效率提升操心,因为过早地优化是万恶之源。

Donald Knuth


3
“你也应该尽量保持一致”……为此点赞。 - sberry
为了保持一致性,我经常这样编写代码:'i have ' . $count . 'things' . "\n"。但这似乎比"i have $count things\n"更凌乱。我想这并不重要,只要之后可以读懂就好了。 - cornernote

5
请看双引号(")和单引号(')字符串的性能比较 @ phpbench
结论:“在今天的PHP版本中,似乎这个争论已经被两方都满足了。让我们在这件事上团结一致!”

1
+1. 我不得不听另外两个开发人员告诉我使用单引号对性能有多么重要。我编写了自己的基准测试脚本,向他们展示这种差异实际上是微不足道的。我的意思是,微秒级别的时间...得了吧。有这个参考资料真好。 - sberry
@sberry2A,你和Marcin一样错了,他的php bench也是如此。与其编写自己的基准测试脚本,你应该对代码进行分析,找到真正重要的性能问题。这种语言真的受到业余开发人员的影响。 - Your Common Sense

4
关于速度,唯一正确的答案是根本不应该是你所关心的。没有必要担心速度差异,因为它并不重要。如果你关心速度,就应该了解整个画面,而不仅仅是其中的一个像素。使应用程序更快、更高效是一项伟大而复杂的任务。但这不能通过问“哪个更快”来完成。如果你真的关心速度,那么从学习什么是“分析”开始吧。
至于优点,最好的学习地方是手册页面:http://php.net/types.string。虽然它并不是优点,而是用例。

1
我同意抢占式优化通常是不好的,并且单引号和双引号字符串之间的速度差异非常小。但是,即使是小的差异在合适的场景下也可能会产生影响,而且我认为你忘记了一些人问这个问题时可能面临这样的情况。 - HardlyNoticeable

2

如果不需要对其中的文本进行处理,则使用单引号更快。


我不知道为什么这个回答被踩了。它是唯一一个实际正确回答问题的答案。其他所有答案都说“无所谓”,虽然是真的,但并没有回答问题。 - dev_row
请注意,这个答案可能参考了 PHP 5.2,在那个版本中性能差异更加明显。在 > 5.3 版本中,大多数情况下时间差异不到 1%。 - dev_row

1

单引号通常更快,并且内部引用的所有内容都被视为普通字符串,

例如

echo 'anyting else ? $something';
>> anything else? $something

PHP不会使用额外的处理来解释单引号内部的内容

然而,与双引号相比,PHP将用其分配的值替换$something

$something = 'yup';
echo "anyting else ? $something";
>> anything else ? yup

2
即使是单引号中的字符串也需要一些解释...一个带有 ' 或 \ 的字符串,即使在单引号中,也需要解释以正确处理这些字符...而且速度上没有明显的差异。 - Mark Baker
这可能是在回答此问题时的情况,但是今天在性能方面单引号和双引号之间的差异是可以忽略不计的,除非您正在处理循环中的数百万个字符串。 - GordonM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接