我想知道以下代码:
<?php
printf ("%s", $some_variable);
?>
比以下更有效:
<?php
echo "$some_variable";
?>
变量插值的一个常见抱怨是它非常慢。我想知道是否有一个更好的替代变量插值,不会使一个人的代码像下面那样凌乱:
<?php
echo $first_var, ' some string ', $second_var;
?>
答案 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?>
...
<?