在PHP脚本中,我应该使用echo还是print?

14

在PHP脚本中,我应该使用哪个语句?Echo还是Print?哪个更快速且更常用?谢谢提前。


1
可能是参考:比较PHP的print和echo的重复问题。 - Ambo100
9个回答

18

echo和print都是PHP的语言结构(而不是函数)。哪个更好取决于你的优先考虑因素。我会考虑三个可能的优先考虑因素:1. 你提到了速度;2. 你提到了广泛使用;3. 我会加上灵活性。

速度:正如其他人提到的,echo稍微快一些(特别是在使用多参数语法时,元素之间用逗号分隔),但差异如此微小,只有在有成千上万个循环的代码中才会真正有所影响。请参考http://www.phpbench.com进行基准测试。
广泛使用:似乎出于传统原因,echo在PHP中比print更受欢迎。这只是个人经验,但我认为当你从各种来源阅读PHP代码时,你会得出同样的结论。
灵活性:我认为在表达代码方面,print肯定比echo更灵活。Echo只有一个“优势”:你可以使用以下语法:echo $arg1, $arg2, ...使用逗号列出参数;print不支持逗号语法。然而,你可以用句点(.)替代逗号,从而在echo和print中得到完全相同的结果:print $arg1. $arg2. ...。因此,这种语法在灵活性和表达方面没有任何优势。正如我在第1点中提到的,这只是一个微小的优势,因为它会导致更快的代码,但在99%的代码中,这可能并不重要。
相比之下,打印可以做到的一件事情是回传一个值,而回声无法做到这一点,因此它可以完全充当一个函数。一方面,它有限制,因为无论如何打印总是返回一个值为1。另一方面,你可以用打印来做到这一点,但不能用回声来做到。
`<?php ($age >= 18) ? print('Can vote.') : print('Cannot vote.'); ?>`

(摘自Murach's PHP and MySQL 2010,第227页)
因此,print几乎可以像echo一样在代码中表达出所有的灵活性,但是echo有一个重要的用例,它无法做到print所能做的:在可能有用的上下文中,print可以充当一个函数。(我说“充当一个函数”,因为它不是一个函数;它是一个语言结构,就像echo一样。)
至于简写的echo语法<?=$foo?>(自PHP 5.4起,<?php=$foo?>也可以使用:https://www.php.net/manual/en/function.echo.php),它可能被称为“echo”的简写,但你同样可以称之为“print”的简写,因为它只是一个不同的语言结构。没有逻辑依据称这是echo相对于print的“优势”,正如一些人所声称的,因为这个结构既不是echo也不是print——它是一个执行与两者相同功能的替代结构。
对我个人来说,我更喜欢选择一种方式并始终坚持使用。我个人更喜欢使用print,因为它在编码灵活性上稍微具有优势,并且“print”对我来说听起来更直观 - 这纯粹是主观的。我不在乎echo可能更广泛使用,因为如果其他人需要阅读我的代码,他们同样能够理解print。对于那1%的代码,真的真的需要考虑打印速度的情况,那么我会使用echo。

1
请正确使用三元运算符:如果你要使用三元运算符,请使用正确的语法:<?php print(($age >= 18) ? '可以投票。' : '不能投票。'); ?>。+1 如果有详细的差异说明。 - Andrew Larsson
1
事实上,我的例子是为了说明目的而正确的。我的观点是为了演示适用于print但不适用于echo的代码,而不是展示三元运算符的最佳或最正确的用法。你的“更正”并没有达到这个目的:它既适用于print又适用于echo。我希望现在你更好地理解我的例子了。 - Tripartio
哦,我现在明白你的意思了。谢谢! - Andrew Larsson
你可以在三元运算符中使用echo。<?php echo ($age >= 18)? '可以投票。':'不能投票。'; ?> - user1393215
1
你在评论中提供的例子(与上一条评论相同)与我的例子不同。我的例子使用print作为三元运算符的结果值,而不是评估表达式。我的观点是echo不能作为结果值工作,因为它不返回值。 - Tripartio

11
据说echo更快,但两者都可以很好地工作。
在嵌入PHP到HTML中时,Echo还提供了一种快捷语法。即。
    I have <?=$foo?> foo.

vs
     I have <?php echo $foo;?> foo.

查看https://www.php.net/manual/zh/function.echo.php

1
请随意编辑答案并进行适当更新 - 这个问题很久以前就已经回答了。 - Ryan
1
说echo提供<?=$foo?>(或PHP 5.4的<?php=$foo?>)并没有太多意义。那不是一个“echo”——它只是一种替代的PHP语言结构,与echo或print执行相同的操作。你也可以说<?=$foo?>是“print”的快捷语法。 - Tripartio

5

它不会影响文本的显示方式,但是两者的行为不同...

例如,print 根据它是否能够显示要打印的文本返回一个值(truefalse);而 echo 则只是简单地给出并继续执行。

这样做是有效的:

if (print ($variable)) {
//do something
}

这是毫无意义的:

if (echo $variable) {
//do something
}

如果打印总是返回1,那么为什么需要if语句呢? - rorypicko
这个更好多了。语法高亮器通常会捕获print()语句吗? - expiredninja

5
我亲自测试过:
$StartTime=microtime(1);
echo '<div style="display:none">';
for($i=0;$i<100000;$i++)
    echo "Hello world!<br />";

echo "</div>Echo: ".round(microtime(1)-$StartTime,5);

$StartTime=microtime(1);
echo '<div style="display:none">';
for($i=0;$i<100000;$i++)
    print "Hello world!<br />";

echo "</div><br />Print: ".round(microtime(1)-$StartTime,5);

echo的执行时间约为0.09秒
print的执行时间约为0.3秒至0.5秒


1

echo更快。而且echo()可以打印多个参数,print()只能打印一个参数。


0

echo 可以有两个参数

例如:echo $x, "\n";

print 只能有一个参数

例如:print "\n";


0

echo()print()在我能想到的每种使用情况下都更快 - 虽然差别不大,但会累加。

以下是一些基准测试证据:http://www.phpbench.com 滚动到“echo vs. print”


0

输出多个字符串的最快方式是:

echo "string","string","string";

这甚至不需要执行字符串的连接,它只是一个接一个地回显一个字符串。 print() 没有任何问题,我认为除非你要输出数百万行,否则你不会真正看到差异。


0

在我看来,这不是一个速度问题。如果我正在开发一个应用程序,其中echo和print之间的速度差异具有任何重要意义,那么我会考虑使用与PHP不同(非解释性)的编程语言,这是非常明显的信号。

但只要你坚持使用PHP,那么这只是一种口味上的问题。顺便说一句,我更喜欢echo,因为它意味着更少的打字;)


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