【问题标题】:In PHP, is printf more efficient than variable interpolation?在 PHP 中,printf 是否比变量插值更有效?
【发布时间】:2009-07-14 03:36:12
【问题描述】:

我想知道下面的代码:

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

比以下更有效:

<?php
echo "$some_variable";
?>

变量插值的一个常见抱怨是它非常慢。我想知道是否有更好的替代变量插值的方法,它不会使代码像这样混乱:

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

【问题讨论】:

  • 您应该能够使用计时器和带有大 n 的 for 循环轻松测试。

标签: php optimization


【解决方案1】:

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

【讨论】:

  • 非常感谢您的明智之言。我决定最好只使用更易读的东西——因为从长远来看,打印字符串的不可读(但快速)方式可能最终对我来说更糟。
【解决方案2】:

快速测试:

$ 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 明显比简单的 echo 慢。 带有变量插值的回声比简单回声要慢一些。差异不明显,可能是因为测试用例不好。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 非常感谢!虽然该链接似乎还没有回答我最初的问题,但它非常方便。
    【解决方案4】:

    我不知道 printf 的效率如何,但是如果您正在寻找一个看起来不像回显那么混乱的解决方案,我建议您从 php 中转义以打印字符串,然后使用短标签来打印变量.

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

    【讨论】:

    • 不幸的是,短标签不是我的选择。即使它们是,我仍然不会使用它们,因为许多其他程序员不喜欢短标签——这是有充分理由的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多