我想知道,如果下面的代码:在PHP中,printf比变量插值更有效吗?
<?php
printf ("%s", $some_variable);
?>
的效率比:变量代换
<?php
echo "$some_variable";
?>
一个常见的抱怨是,它是非常缓慢的。我想知道如果有变量替换一个更好的选择,这并不使一个人的代码凌乱:
<?php
echo $first_var, ' some string ', $second_var;
?>
我想知道,如果下面的代码:在PHP中,printf比变量插值更有效吗?
<?php
printf ("%s", $some_variable);
?>
的效率比:变量代换
<?php
echo "$some_variable";
?>
一个常见的抱怨是,它是非常缓慢的。我想知道如果有变量替换一个更好的选择,这并不使一个人的代码凌乱:
<?php
echo $first_var, ' some string ', $second_var;
?>
变量插值,字符串连接,多参数传递和s?printf中的参数对于缺少更好的单词而言是愚蠢的。不要担心这种微不足道的微观优化,直到它成为内存/速度瓶颈,它永远不会成为现实。所以有效地只是使用任何你想要的,考虑到可读性,辨别力和简单的偏好。
非常感谢你的智慧的话。 我决定最好只选择更可读的方式 - 因为从长远来看,打印字符串的方式不可读(但速度很快)可能最终会变得更糟。 – 2009-07-14 02:20:13
我不知道printf的效率如何,但如果你正在寻找一个解决方案,看起来不像回声那样混乱,我建议从PHP中跳出来打印字符串,然后使用短标签打印变量。
?>
...
<?=$first_var?> some string <?=$second_var?>
...
<?
不幸的是,短标签不适合我。即使他们是,我仍然不会使用它们,因为许多其他程序员对短标签皱眉 - 这是很好的理由。 – 2009-07-13 20:30:51
快速测试:
$ 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的显著比简单的回声慢。 带可变插值的回声比简单回声慢一点。差别不大,可能是因为测试用例不好。
这个基准设计很狭隘。不要跟着它。 – moo 2009-07-13 19:36:43
你应该可以用一个定时器和一个for循环来测试这个很大的n。 – 2009-07-13 19:14:06