so php 单引号快还是双引号快?

2013-09-28 12:56:56 +08:00
 xiasix
http://www.metamorphosite.com/php-benchmarks-loops-arrays
单纯的字符串的时候 他说是双引号快点
so 自己写了个测了一下,php5.5 mac系统 终端下运行
<?php
$t1 = microtime(true);
$i = 1;

while ($i < 1000000) {
$text = 'das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k';

++$i;
}

$t2 = microtime(true);
echo (($t2 - $t1) * 1000) . 'ms' . PHP_EOL;
$i = 1;
while ($i < 1000000) {
$text = "das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k";

++$i;
}

$t3 = microtime(true);
echo (($t3 - $t2) * 1000) . 'ms'.PHP_EOL;
结果
bogon:~ kele$ php www/1.php
86.992979049683ms
87.911128997803ms
bogon:~ kele$ php www/1.php
87.116956710815ms
88.299036026001ms
bogon:~ kele$ php www/1.php
89.183807373047ms
87.899208068848ms
bogon:~ kele$ php www/1.php
87.803840637207ms
88.411092758179ms
bogon:~ kele$ php www/1.php
87.093114852905ms
88.102102279663ms
bogon:~ kele$ php www/1.php
88.034868240356ms
88.240146636963ms
bogon:~ kele$ php www/1.php
88.271856307983ms
88.357210159302ms
bogon:~ kele$ php www/1.php
87.208032608032ms
86.41791343689ms
4463 次点击
所在节点    程序员
22 条回复
pathletboy
2013-09-28 13:08:53 +08:00
这种测试不准的,因为你的线程可能会被切换走,导致运行时间增加,特别是你这种时间越短越不准。
shiny
2013-09-28 13:11:38 +08:00
它也没说所有情况下单引号都快啊:
Double quotes is 2.9% faster than Single quotes by an average of 0.00024834399999999µs.
Single quotes concatenation is 5.44% faster than Double quotes concatenation by an average of 0.0005676475789474µs.

不同的地方是双引号还要解析字符串吧。
在我看来在 php 里比这种快慢是非常非常无聊的。
skydiver
2013-09-28 13:15:44 +08:00
纠结这些细节没什么意义..来一个数据库IO,这些省出来的时间全不值一提。
yakczh
2013-09-28 13:26:19 +08:00
php慢不是因为拼字符串,而是很多框架引用一大堆没用的类,引起的额外的io开销,每次请求都要调用stat都检查每个文件是不是有更新 ,导致单文件和框架会有70%的性能差距
yakczh
2013-09-28 13:29:08 +08:00
累计百万的请求省出来1毫秒的优势,小伙伴们都惊呆了
yangqi
2013-09-28 13:53:16 +08:00
都5年前的文章了, 别太当真了.

不信你把上下两次比较都用同样的,单引号或者双引号. 最后结果也是不同的, 所以结果你明白的
xiasix
2013-09-28 13:53:28 +08:00
@yakczh 测试,测试 你和你的小伙伴们懂么
xiasix
2013-09-28 13:55:38 +08:00
@skydiver 只是想知道以后想代码申明字符串的时候 是 $a="nihao"; 还是$a='nihao'; 而已
zhujinliang
2013-09-28 14:15:29 +08:00
双引号可以处理嵌入变量,拼字符串时会很便利
用到这种特性时就写双引号,用不到时就写单引号
msg7086
2013-09-28 14:17:51 +08:00
@xiasix 从语言源码角度来说,单引号是字符串立即量,双引号则会解析变量引用,所以单引号要比双引号快。
实际则是两者速度非常接近,就算你把整个页面所有的单引号都改成双引号,对执行效率的影响还不及气温带来的速度变化。
ejin
2013-09-28 15:01:31 +08:00
100万次才这么点区别么……
yxzblue
2013-09-28 15:51:03 +08:00
看来,大伙讨论得够多了。我插句,按文档来吧
yakczh
2013-09-28 16:16:29 +08:00
别搞这些hellowold式的测试了,测试下不同框架数据库两个表连接查询的性能对比才有实际意义
taogogo
2013-09-28 16:29:26 +08:00
只能理论上来说,单引号快,其实是无所谓的,代码好看就好
zhujinliang
2013-09-28 16:36:43 +08:00
@msg7086 这种解析不应该是编译期做的事么,理论上两种写法编译后应该是一样的,只是编译过程中处理方式不一样会有效率差别
zouchao
2013-09-28 16:46:58 +08:00
这个时间的差异,觉得没有太大的意思!
nine
2013-09-28 17:13:00 +08:00
<?php
$t1 = microtime(true);
$i = 1;

while ($i < 1000000) {
$text = 'das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k';

++$i;
}

$t2 = microtime(true);
echo (($t2 - $t1) * 1000) . 'ms' . PHP_EOL;
$i = 1;
while ($i < 1000000) {
$text = "{$i}das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k";

++$i;
}

$t3 = microtime(true);
echo (($t3 - $t2) * 1000) . 'ms'.PHP_EOL;

?>


给你改了一点点 LZ 运行这段代码试试
xlmo
2013-09-28 17:14:00 +08:00
用双引号还是单引号除了功能区别外主要还是习惯上的区别。性能上的区别微乎其微,没有必要纠结在这上面。
比如对于有变量的字符串我用双引号,没有变量的字符串我用单引号。
zencoding
2013-09-28 18:23:59 +08:00
把单引号作为习惯即可,没必要吹毛求疵
msg7086
2013-09-29 02:09:20 +08:00
@zhujinliang 好吧,的确有这个可能,内嵌变量可以在编译阶段重写成字符串拼接。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/84018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX