【问题标题】:How are echo and print different in PHP? [duplicate]PHP 中的 echo 和 print 有何不同? [复制]
【发布时间】:2010-09-19 01:17:17
【问题描述】:

可能重复:
Reference: Comparing PHP's print and echo

这两个函数在 PHP 中是否有任何主要和根本的区别?

【问题讨论】:

    标签: php echo


    【解决方案1】:

    来自: 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。这意味着打印 可以用作 echo 不能的更复杂表达式的一部分。一个 PHP 手册中的示例:

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

    print 也是优先表的一部分,如果它需要它 将在复杂表达式中使用。它就在底部 虽然是优先级列表。只有 , AND OR XOR 较低。

    1. 参数。语法为:echo expression [, expression[, 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";
    

    【讨论】:

    • echo 也可以用于三元运算:echo ($b) ? “真”:“假”;
    • @philjohn 我很确定您的陈述等同于: echo (($b) ? 'true' : 'false');而不是: (echo ($b)) ? '真假';所以 echo 不是三元运算中实际条件的一部分。
    • 为了让 echo 无法做到的事情:$b ? print "true" : die("false");
    • 来自 w3C:PHP print 声明:print 也是一种语言结构,
    • 你可以echo(print('test')),但你不能print(echo('test'))
    【解决方案2】:

    他们是:

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

    【讨论】:

      【解决方案3】:

      补充一下上面的答案,虽然 print 只能接受一个参数,但它允许连接多个值,即:

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

      这是 1 个参数中的 5 个值

      【讨论】:

        【解决方案4】:

        我认为print()echo 慢。

        我喜欢将print() 仅用于以下情况:

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

        【讨论】:

        • 先生,您能说得更清楚些吗?
        • 哇,这是九年前的一个非常糟糕的答案,我认为我们无法改进它。对不起!
        • @Legend 我认为@grilix 指的是 print() 返回 1 的能力。如果 foo() 函数返回 false,则 and 部分为 false... 这样就可以评估的第二部分(在or 之后)执行。这是我没想到的print 的有趣用法。
        【解决方案5】:

        根据 PHP.net 手册的建议,请阅读 this discussion

        一个主要区别是echo 可以采用多个参数来输出。例如:

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

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

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

        【讨论】:

        • echo 不接受 echo('foo','bar');,但接受 echo 'foo', 'bar';
        • 我知道这个答案很旧,但print 不是总是返回 1 吗?此外,您何时以及为什么需要进行测试以确保打印出某些内容?这只是直接不需要,永远!坦率地说,打印是无用的,应该删除,以支持 ECHO!