2009-07-13 46 views
1

我想知道,如果下面的代码:在PHP中,printf比变量插值更有效吗?

<?php 
printf ("%s", $some_variable); 
?> 

的效率比:变量代换

<?php 
echo "$some_variable"; 
?> 

一个常见的抱怨是,它是非常缓慢的。我想知道如果有变量替换一个更好的选择,这并不使一个人的代码凌乱:

<?php 
echo $first_var, ' some string ', $second_var; 
?> 
+0

你应该可以用一个定时器和一个for循环来测试这个很大的n。 – 2009-07-13 19:14:06

回答

5

变量插值,字符串连接,多参数传递和s?printf中的参数对于缺少更好的单词而言是愚蠢的。不要担心这种微不足道的微观优化,直到它成为内存/速度瓶颈,它永远不会成为现实。所以有效地只是使用任何你想要的,考虑到可读性,辨别力和简单的偏好。

+0

非常感谢你的智慧的话。 我决定最好只选择更可读的方式 - 因为从长远来看,打印字符串的方式不可读(但速度很快)可能最终会变得更糟。 – 2009-07-14 02:20:13

0

我不知道printf的效率如何,但如果你正在寻找一个解决方案,看起来不像回声那样混乱,我建议从PHP中跳出来打印字符串,然后使用短标签打印变量。

?> 
... 
<?=$first_var?> some string <?=$second_var?> 
... 
<? 
+1

不幸的是,短标签不适合我。即使他们是,我仍然不会使用它们,因为许多其他程序员对短标签皱眉 - 这是很好的理由。 – 2009-07-13 20:30:51

3

快速测试:

$ cat test-echo.php 
<? 
$i=10000000; 
$some_variable = 'test'; 
while($i--){ 
echo "$some_variable"; 
} 
$ cat test-echo2.php 
<? 
$i=10000000; 
$some_variable = 'test'; 
while($i--){ 
    echo $some_variable; 
} 
$ cat test-printf.php 
<? 
$i=10000000; 
$some_variable = 'test'; 
while($i--){ 
    printf ("%s", $some_variable); 
} 

$ time php test-echo.php > /dev/null 

real 0m16.099s 
user 0m8.254s 
sys  0m4.257s 

$ time php test-echo2.php > /dev/null 
real 0m15.122s 
user 0m6.913s 
sys  0m4.037s 

$ time php test-printf.php > /dev/null 
real 0m48.235s 
user 0m30.643s 
sys  0m11.614s 

所以printf的显著比简单的回声慢。 带可变插值的回声比简单回声慢一点。差别不大,可能是因为测试用例不好。

+1

这个基准设计很狭隘。不要跟着它。 – moo 2009-07-13 19:36:43

1

尝试检出http://phpbench.com以比较所有nitpicky微优化。

+0

非常感谢! 虽然该链接似乎还没有回答我的原始问题,但它非常方便。 – 2009-07-13 20:31:39