PHP字符串连接-“$a$b“;一美元对一美元&引用&引用$b-性能

PHP字符串连接-“$a$b“;一美元对一美元&引用&引用$b-性能,php,performance,string,concatenation,Php,Performance,String,Concatenation,比如说,以下两种情况之间是否存在速度差异: $newstring=“$a和$b出去看$c” 及 $newstring=$a。“和”$B“出去看”$c 如果是,原因是什么?是的,但两者之间的差异可以忽略不计 $newstring = "$a and $b went out to see $c"; 及 如果您使用: $newstring = $a . ' and ' . $b . ' went out to see ' . $c; 差异会稍微大一些(但可能仍然可以忽略不计),原因是,如果我没有记

比如说,以下两种情况之间是否存在速度差异:

$newstring=“$a和$b出去看$c”

$newstring=$a。“和”$B“出去看”$c


如果是,原因是什么?

是的,但两者之间的差异可以忽略不计

$newstring = "$a and $b went out to see $c";

如果您使用:

$newstring = $a . ' and ' . $b . ' went out to see ' . $c;

差异会稍微大一些(但可能仍然可以忽略不计),原因是,如果我没有记错的话(这一点我可能错了),PHP会扫描并解析变量和特殊字符(\t、\n等等)的双引号内的内容当使用单引号时,它不会解析变量或特殊字符,因此速度可能会略有提高。

根据PHP版本的不同,如果按以下方式编写,则第二个引号的速度会有所不同:
$newstring=$a'和'$b出去看电影$c

PHP在版本和构建之间非常不一致。谈到性能,您必须自己测试它。 需要说明的是,它还取决于
$a
$b
$c
的类型,如下所示

当您使用
时,PHP解析字符串以查看其中是否使用了任何变量/占位符,但如果您仅使用
PHP将其视为一个简单的字符串而不进行任何进一步处理。因此通常
应该更快。至少在理论上如此。在实践中,必须进行测试


结果(以秒为单位):

a、b、c是整数:
全部内部”:1.2370789051056
使用“:1.2362520694733拆分
使用“:1.2344131469727”拆分
a、 b,c是字符串:
全部内部”:0.67671513557434
使用“:0.7719099521637”拆分

使用“:0.78600907325745”进行拆分可能会有速度差异,因为这是两种不同的语法。你需要问的是,这种差异是否重要。在这种情况下,不,我认为你不需要担心。这种差异太小了


我建议你做任何对你视觉上最有意义的事情。“
$a和$b出去看$c
”在看它的时候可能会有点混乱。如果你想走这条路,我建议你在变量周围加上花括号:“
{$a}和{$b}出去看{$c}

为什么不测试一下,比较一下差异?数字不会说谎,如果你发现其中一个表现比另一个好,那么你应该问为什么。

我做了一个快速的基准测试,正如其他人所说,结果非常不一致。我没有注意到使用单引号而不是双引号的性能提高。我的猜测是,这一切都归结于偏好

对于您的编码样式,您可能希望使用一种类型的引号,如果需要,请选择双引号。替换功能比您想象的更方便


我使用了基准代码。

如果您担心这个级别的字符串连接速度,那么您使用的语言是错误的。如果这真的是一个瓶颈,用C为这个用例编译一个应用程序,并在PHP脚本中调用它。

没有区别,句号。;)

根据最小惊奇原则,两个表示完全相同事物的不同语法应该具有相同的属性。事实上,它可能不在PHP中,这只是PHP的一个坏特性。@Ira:甚至更糟。。。请参见下面我的结果。在一种情况下最快的也可能是另一种情况下最慢的。从我对字符串解析的了解来看,这是一个神话,单引号会更快。我的经验正好相反,我不知道为什么这个答案被否决了。当你使用PHP时,这是最好的建议。因为这不是一个有用的答案。我已经知道我可以自己试试。我把它贴在这里是想看看其他人都说了些什么。当然有,但不是很重要。从一个PHP版本到另一个PHP版本也不一致。这是一个非常没有帮助的答案。这就像是告诉波士顿的某个人,如果他问天气是否会变暖,他们应该搬到迈阿密去。@MikeSchinkel:我想这个比喻应该是:“我想去魁北克野营,想知道:波士顿的天气怎么样?”。答案很明显:“魁北克不在波士顿,甚至不在美国,你在寻找错误的答案。”说明哪种语法更快将支持OP专注于错误的信息,这根本无助于他成为一名更好的开发人员。同样的想法(表达得有点激进)可以在这里找到:@soulmerge-鉴于你对使用哪种工具的看法可能是唯一正确的看法,你每天必须与这么多不那么聪明的人打交道一定很孤独。@MikeSchinkel:我不明白,你为什么这么激进?我冒犯了你吗?@soulmerge-因为你的回答是彻头彻尾的冒犯。告诉某人使用另一种语言,并暗示他们(可能)有正当需要时不能成为该平台上的优秀开发人员是傲慢、傲慢和不尊重的。
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
a, b, c are integers:
all inside "     : 1.2370789051056
split up using " : 1.2362520694733
split up using ' : 1.2344131469727

a, b, c are strings:
all inside "     : 0.67671513557434
split up using " : 0.7719099521637
split up using ' : 0.78600907325745  <--- this is always the slowest in the group. PHP, 'nough said
<?php

echo 'a, b, c are integers:<br />';
$a = $b = $c = 123;

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br /><br />a, b, c are strings:<br />';

$a = $b = $c = '123';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br />';

?>