哪个性能更好:带引号的双引号字符串或带连接的单引号字符串?

时间:2009-08-21 11:13:17

标签: php performance string

我知道在PHP中使用字符串周围的单引号比使用双引号要快,因为PHP不需要检查单引号字符串中的变量是否存在。我的问题是哪个会表现得更好:

A)带有变量的双引号字符串:

echo "foo bar $baz";

B)单引号带有连接变量:

echo 'foo bar ' . $baz;

7 个答案:

答案 0 :(得分:6)

我在前一段时间的博客(link)上对此进行了基准测试。然而,正如我已经意识到有很多变数。其中最主要的是:

  1. 你在做多少连接?每次进行连接时,PHP都会重新解析整个字符串(或者我已被告知)。因此,1连接可能会更快,但6可能会慢得多。
  2. 数据类型。虽然我自己没有亲自测试过这个,但我被告知连接的数据类型也很重要,虽然我不确定它有多少。
  3. 总而言之,对于你来说实际上担心它并不是什么大不了的事。一般来说,如果你正在写一个巨大的网站(想想MySpace,Facebook,Flickr等),它只会产生显着的差异,而且通常到那时你有很多硬件在后面,单一与双引号的东西再次无关紧要

    就我个人而言,我认为更重要的事情会以更实质的方式影响性能(缓存,SQL优化,自动加载以防止不必要的包含等)。

    我个人几乎每次都会选择单引号,但不是速度。我这样做是因为我觉得它更具可读性。对我来说这很重要。

答案 1 :(得分:3)

说实话,我认为在寻求保存性能时,你不需要仔细审查这个特定的惯例。但是,对于它的价值,我想我会记得读到字符串中的变量效率较低(请注意,它可以忽略不计,在我看来不是问题)而不是连接。

答案 2 :(得分:3)

我在这个问题上全心全意地同意Jonathan Sampson,但我认为有一个解决方案比你发布的解决方案更快。在echo使用多个参数:

echo 'foo bar', $baz;

这仅适用于使用echo语句时,在任何其他上下文中,连接可能更好,但我在这方面力求可读性,因此我尽可能使用插值。

答案 3 :(得分:2)

我在我的Vista / php5盒子上测试时间(microtime)有两个循环,一个用于'和一个用于'。

100次迭代: - 单引号:0.000139 - 双引号:0.000228

1000次迭代: - 单引号:0.002377 - 双引号:0.002056

2000次迭代: - 单引号:0.003562 - 双引号:0.010041

编辑: 也定时回声'Foo',$ bar; 100次迭代= 0.000107,1000次迭代= 0.001381,2000次迭代= 0.022434。

回声'Foo',$ bar;是100次和1000次迭代中最快的,但由于某种原因,它在2000次迭代中最慢......?

答案 4 :(得分:0)

没有测试(这是解决此类问题的唯一正确方法)我会说单引号字符串连接,因为字符串不必解析。但它非常依赖于实现。

双引号字符串具有较少的视觉混乱和残留。所以我和乔纳森一起说,表现差异可能并不那么重要,你应该担心它;相反,采用在项目中更容易维护和一致的方式。

答案 5 :(得分:0)

我前一段时间读了一篇文章,其中有人实际测试了它。

结论是单引号效率更高,但正如其他两个答案所指出的那样,性能差异不会太大而无法担心。

答案 6 :(得分:0)

以下是一篇较旧的文章,最后一篇文章于2007年3月发布,但它显示效果差异非常小: PHP double versus single quotes by Dave Dash

我最近阅读了另一篇文章(虽然不能再找到它),甚至声称在某些情况下,双引号可能比单个qoutes更快。不确定这是否真的正确。

所以我更关心的是代码的可读性。如果你把变量放在引号内,那么如果它是一个更大的文本可能更难阅读/查找。