在PHP中,printf比变量插值更有效吗?

时间:2009-07-13 19:03:25

标签: php optimization

我想知道以下代码:

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

比以下更有效:

<?php
echo "$some_variable";
?>

变量插值的一个常见抱怨是它非常慢。我想知道是否有一个更好的替代变量插值,不会使一个人的代码像下面那样凌乱:

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

4 个答案:

答案 0 :(得分:5)

变量插值,字符串连接,多参数传递和s?printf之间的争论是缺乏更好的词,愚蠢。不要担心这种微不足道的微优化,直到它成为内存/速度瓶颈,它永远不会成为。因此,只需使用您想要的任何东西,考虑可读性,可辨别性和普遍偏好。

答案 1 :(得分: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显着慢于简单回声。 变量插值的回波比简单回波慢一点。差异不大,可能是因为测试用例不佳。

答案 2 :(得分:1)

尝试检查http://phpbench.com以比较所有挑剔的微观优化。

答案 3 :(得分:0)

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

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