![]() | 1 pathletboy 2013-09-28 13:08:53 +08:00 这种测试不准的,因为你的线程可能会被切换走,导致运行时间增加,特别是你这种时间越短越不准。 |
![]() | 2 shiny 2013-09-28 13:11:38 +08:00 它也没说所有情况下单引号都快啊: Double quotes is 2.9% faster than Single quotes by an average of 0.00024834399999999s. Single quotes concatenation is 5.44% faster than Double quotes concatenation by an average of 0.0005676475789474s. 不同的地方是双引号还要解析字符串吧。 在我看来在 php 里比这种快慢是非常非常无聊的。 |
![]() | 3 skydiver 2013-09-28 13:15:44 +08:00 ![]() 纠结这些细节没什么意义..来一个数据库IO,这些省出来的时间全不值一提。 |
![]() | 4 yakczh 2013-09-28 13:26:19 +08:00 php慢不是因为拼字符串,而是很多框架引用一大堆没用的类,引起的额外的io开销,每次请求都要调用stat都检查每个文件是不是有更新 ,导致单文件和框架会有70%的性能差距 |
![]() | 5 yakczh 2013-09-28 13:29:08 +08:00 累计百万的请求省出来1毫秒的优势,小伙伴们都惊呆了 |
![]() | 6 yangqi 2013-09-28 13:53:16 +08:00 都5年前的文章了, 别太当真了. 不信你把上下两次比较都用同样的,单引号或者双引号. 最后结果也是不同的, 所以结果你明白的 |
![]() | 9 zhujinliang 2013-09-28 14:15:29 +08:00 双引号可以处理嵌入变量,拼字符串时会很便利 用到这种特性时就写双引号,用不到时就写单引号 |
![]() | 10 msg7086 2013-09-28 14:17:51 +08:00 @xiasix 从语言源码角度来说,单引号是字符串立即量,双引号则会解析变量引用,所以单引号要比双引号快。 实际则是两者速度非常接近,就算你把整个页面所有的单引号都改成双引号,对执行效率的影响还不及气温带来的速度变化。 |
![]() | 11 ejin 2013-09-28 15:01:31 +08:00 100万次才这么点区别么…… |
![]() | 12 yxzblue 2013-09-28 15:51:03 +08:00 看来,大伙讨论得够多了。我插句,按文档来吧 |
![]() | 13 yakczh 2013-09-28 16:16:29 +08:00 别搞这些hellowold式的测试了,测试下不同框架数据库两个表连接查询的性能对比才有实际意义 |
![]() | 14 taogogo 2013-09-28 16:29:26 +08:00 只能理论上来说,单引号快,其实是无所谓的,代码好看就好 |
![]() | 15 zhujinliang 2013-09-28 16:36:43 +08:00 @msg7086 这种解析不应该是编译期做的事么,理论上两种写法编译后应该是一样的,只是编译过程中处理方式不一样会有效率差别 |
16 zouchao 2013-09-28 16:46:58 +08:00 这个时间的差异,觉得没有太大的意思! |
![]() | 17 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 运行这段代码试试 |
![]() | 18 xlmo 2013-09-28 17:14:00 +08:00 用双引号还是单引号除了功能区别外主要还是习惯上的区别。性能上的区别微乎其微,没有必要纠结在这上面。 比如对于有变量的字符串我用双引号,没有变量的字符串我用单引号。 |
![]() | 19 zencoding 2013-09-28 18:23:59 +08:00 把单引号作为习惯即可,没必要吹毛求疵 |
![]() | 20 msg7086 2013-09-29 02:09:20 +08:00 @zhujinliang 好吧,的确有这个可能,内嵌变量可以在编译阶段重写成字符串拼接。 |
![]() | 21 DKR 2013-09-29 09:47:15 +08:00 |
22 doublleft 2013-10-01 00:12:04 +08:00 优先使用单引号 $var = 'hello' . 'myname' . 'is' . name(); //这样就会太尴尬了 不如就 $var = "hello, myname is : name() "; //多了然 |