PHP中的echo和print有什么不同?

236
5个回答

302

来源: http://web.archive.org/web/20090221144611/http://faqts.com/knowledge_base/view.phtml/aid/1/fid/40

  1. 速度。虽然两者有区别,但就速度而言,使用哪个都应该无关紧要。echo 稍微快一点, 因为如果你确实想要深入了解,它不会设置返回值。

  2. 表达式。 print() 的行为类似于函数,因此您可以这样做:$ret = print "Hello World"; 并且 $ret 将是 1。这意味着 print 可以作为更复杂表达式的一部分使用,而 echo 则不能。以下是 PHP 手册中的一个示例:

$b ? print "true" : print "false";

print也是运算符优先级表的一部分,如果要在复杂表达式中使用它,就需要这样做。尽管如此,它几乎位于优先级列表的底部。只有, AND OR XOR比它更低。

  1. 参数。语法为:echo 表达式 [, 表达式[, expression] ... ]但是echo (expression, expression)是无效的。 echo("howdy"),("partner")是有效的;与之等效的是:echo "howdy","partner";(在这个简单的例子中放括号没有任何作用, 因为像这样的单个术语不存在运算符优先级问题。)

因此,没有括号的echo可以接受多个参数,并将它们连接起来。

   echo  "and a ", 1, 2, 3;   // comma-separated without parentheses
   echo ("and a 123");        // just one parameter with parentheses

print()只能接受一个参数:

   print ("and a 123");
   print  "and a 123";

37
echo命令也可以用于三元运算符:echo ($b) ? 'true' : 'false'; - philjohn
37
我很确定你的陈述等同于:echo (($b) ? 'true' : 'false'); 而不是 (echo ($b)) ? 'true' : 'false'; 因此,echo 不是三元运算符中实际条件的一部分。 - Bart
4
为了实现无法通过echo完成的操作:$b ? print "true" : die("false"); - Brilliand
3
从w3C:PHP打印语句:print也是一种语言结构。 - Martin
2
你可以使用 echo(print('test')),但是你不能使用 print(echo('test')) - vdegenne
显示剩余2条评论

77

它们是:

  • print只接受一个参数,而echo可以有多个参数。
  • print返回一个值(1),因此可用作表达式。
  • echo稍微快一些。

10

我认为print()echo慢。

我只喜欢在以下情况下使用print()

 echo 'Doing some stuff... ';
 foo() and print("ok.\n") or print("error: " . getError() . ".\n");

1
先生,您能否表述得更清晰一些? - Legend
1
哇,这是九年前的一个非常糟糕的答案,我认为我们没有任何办法可以改进它。抱歉! - grilix
1
@Legend 我认为 @grilix 指的是 print() 函数能够返回 1 的能力。如果 foo() 函数返回 false,那么 and 部分就是 false... 这样允许执行评估的第二部分(在 or 后面)。这是我没有想到的 print 的有趣用法。 - Armstrongest

9

除了以上的回答,虽然print只能接受一个参数,但它允许将多个值进行拼接,例如:

$count = 5;

print "This is " . $count . " values in " . $count/5 . " parameter";

这是一个参数中的5个值。

6

如PHP.net手册所建议的那样,请阅读这个讨论

一个主要的区别是echo可以带多个参数进行输出。例如:

echo 'foo', 'bar';   // Concatenates the 2 strings
print('foo', 'bar'); // Fatal error

如果您想评估输出语句的结果(如下所示),请使用print。如果不需要,请使用echo

$res = print('test');
var_dump($res); //bool(true)

5
echo 不接受 echo('foo','bar');,但可以接受 echo 'foo', 'bar';。 - grilix
3
我知道这个回答有点老,但是 print 函数不是总是返回1吗?此外,什么时候和为什么需要测试确保某个东西被打印出来了呢?那根本就不需要,永远都不需要!说实话,print 函数是没用的,应该换成 ECHO 函数! - Solomon Closson

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