2009-07-13 8 views
1

私は以下のコードかどうかを知りたい:PHPでは、printfは変数補間より効率的ですか?

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

がより効率的である:変数補間の

<?php 
echo "$some_variable"; 
?> 

一つの共通の不満は、それが非常に遅いことです。私は、ように、1つのコードを作成していない変数補間へのより良い代替手段があるかどうかを知りたいと散らかっ:あなたが解決策を探しているなら、私はどのように効率的なprintfのですけど、いない

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

これはタイマーとforループで大きなnを使って簡単にテストできます。 –

答えて

5

変数補間、文字列連結、複数パラメータ渡し、およびs?printfの間の引数は、より良い単語がないために、愚かです。メモリ/スピードのボトルネックになるまで、この些細なマイクロ最適化については心配しないでください。したがって、読みやすさ、識別性、およびプレーンな好みを考慮して、あなたが望むものを何でも使用できます。

+0

賢明な言葉をありがとうございます。 文字列を印刷するための判読不能な(しかし速い)方法は、おそらく長期的に私にとって悪化してしまうので、読みやすくするためには本当にベストだと決めました。 –

0

ことエコーだけでは不愉快には見えませんが、変数を出力するために短いタグを使用して文字列を出力するPHPから脱出することをお勧めします。

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

残念ながら、短いタグは私の選択肢ではありません。たとえそうであったとしても、他の多くのプログラマーが短いタグで悩んでいるからです。 –

3

クイックテスト:だから、printfの大幅

$ 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 

は、単純なエコーよりも遅くなります。 変数補間を伴うエコーは単純エコーより少し遅いです。おそらくテストケースが不十分で、目立った違いはありません。

+1

このベンチマークは細工されていて狭いです。それに従わないでください。 – moo

1

ニッチピックマイクロ最適化のすべての比較については、http://phpbench.comを参照してください。

+0

ありがとうございました! そのリンクは私の元の質問にまだ答えていないようですが、非常に便利です。 –