哪种编写这段代码的方式最有效?

5

如果我正在处理大量PHP代码,而不是退出PHP,我通常会编写包含变量的代码,如下所示:

echo "This is how I use a ".$variable." inside a string";

但是,像这样真的从PHP中退出更有效吗:

?>

Should I instead use the <? echo $variable; ?> like this

<? // then back into PHP

在整个页面中,会有许多类似以下代码的实例,因为我会用动态内容填充页面,这样说是否过于笼统?

7
你永远不会注意到这两者之间的性能差异,因为它非常小几乎无法测量......如果你需要进行优化,可以对脚本进行剖析并查看SQL查询和文件访问,它们的开销要大得多。 - Mark Baker
echo 变量的性能两种方式几乎没有区别。 - Andreu Ramos
1
如果我只需要编写一行代码,我会使用echo,但当它是几个HTML行时,我会退出PHP。但是,了解两者之间的性能差异将是有趣的。 - romainberger
1
理想情况下,您不应该将大量的PHP代码与HTML混合在一起(除了在模板中)。您应该使用某种形式的模板来分离显示逻辑。 - user895378
6个回答

5

我建议在输出HTML时打破PHP标签,而不仅仅是字符串。

对于一个字符串而言,这样做是可以的:

// You don't need to concat, double quotes interpolate variables
echo "This is how I use a $variable inside a string";

但是对于HTML,我个人喜欢这样做:

<?php //... ?>
<div>
    <span>This is how I use a <?=$variable?> inside HTML</span>
</div>
<?php //... ?>

1

使用echo似乎稍微快一些。我编写了这个简单的基准测试脚本:

<?php
$variable = "hello world";
$num = 10000;
$start1 = microtime(true);
for ($i = 0; $i<$num;$i++) {    
    echo "test " . $variable . " test\n";    
}
$time1 = microtime(true) - $start1;
$start2 = microtime(true);
for ($i = 0; $i<$num;$i++) {
    ?>test <?php echo $variable;?> test
<?
}
$time2 = microtime(true) - $start2;
echo "\n$time1\n$time2\n";

echo循环速度始终快约25%。

实际上,这种差异如此微小,除非您确实在执行数百万个此类输出语句,否则不会对整体性能产生任何影响。我仍然建议使用echo,因为它更直观易读。


0

echo '这是我如何在字符串中使用'.$variable.'的最有效方法'; 可能是这里最有效的方法。

在第一种情况下,您正在使用 ",这会导致整个字符串被评估为内联变量。

在第二种情况下,我想象解释器的上下文切换可能会比我的示例更昂贵。

尽管如此,无论哪种方式,您都会看到可忽略的差异。


不一定是最有效的,因为你正在连接...只是通过逗号分隔的echo未连接参数系列将稍微更有效。 - Mark Baker
@MarkBaker:是的,使用多个参数更有效率,但使用单个变量连接更高效。具体权衡在哪里我不太确定。 - Demian Brecht

0

是的,只需在非PHP(HTML)之间使用<?php ..... ?>,您可以在其中甚至包含do-while、for循环等。


0
在大多数情况下,建议不要使用php的短标签。无论如何,如果您在双引号内部,甚至不必使用连接点来输出变量。您可以这样做:
echo "This is how I use a $variable inside a string";

或者这样:

echo "This is how I use a {$variable} inside a string";

第二个示例允许使用大括号来定界表达式(数组元素和对象属性)。您也可以在第一个示例中使用它们,但变量解析的贪婪有时会引起问题。使用大括号可以避免这种情况的发生。

0
另一种方法是使用printf(),如下所示:
// your variable
$my_variable = "Stack Overflow";

printf("Real programmers graduate on %s", $my_variable);

// this prints 'Real programmers graduate on Stack Overflow, 

Plus操作符的额外好处是不需要频繁地进行连接操作。 然而,了解它与echo语句相比的性能表现可能是值得的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接