236

Possible Duplicate:
Reference: Comparing PHP's print and echo

Is there any major and fundamental difference between these two functions in PHP?

Community
  • 1
  • 1
zuk1
  • 18,009
  • 21
  • 59
  • 63

5 Answers5

301

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

  1. Speed. There is a difference between the two, but speed-wise it should be irrelevant which one you use. echo is marginally faster since it doesn't set a return value if you really want to get down to the nitty gritty.

  2. Expression. print() behaves like a function in that you can do: $ret = print "Hello World"; And $ret will be 1. That means that print can be used as part of a more complex expression where echo cannot. An example from the PHP Manual:

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

print is also part of the precedence table which it needs to be if it is to be used within a complex expression. It is just about at the bottom of the precedence list though. Only , AND OR XOR are lower.

  1. Parameter(s). The grammar is: echo expression [, expression[, expression] ... ] But echo ( expression, expression ) is not valid. This would be valid: echo ("howdy"),("partner"); the same as: echo "howdy","partner"; (Putting the brackets in that simple example serves no purpose since there is no operator precedence issue with a single term like that.)

So, echo without parentheses can take multiple parameters, which get concatenated:

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

print() can only take one parameter:

   print ("and a 123");
   print  "and a 123";
Bahram Ardalan
  • 280
  • 3
  • 11
dl__
  • 4,500
  • 5
  • 28
  • 34
  • 37
    Echo can also be used in a ternary operation: echo ($b) ? 'true' : 'false'; – philjohn Aug 22 '10 at 20:23
  • 37
    @philjohn I'm pretty sure your statement is equavalent to: echo (($b) ? 'true' : 'false'); and not: (echo ($b)) ? 'true' : 'false'; So echo is not part of the actual condition in the ternary operation. – Bart Nov 15 '11 at 16:11
  • 4
    In the interests of making something not doable with `echo`: `$b ? print "true" : die("false");` – Brilliand Aug 16 '12 at 22:41
  • 1
    @Bart print is also not part of the condition in dl__'s example and including it would be a redundant thing. philjohn's example has exactly the same output as dl__'s example. – Orestis P. May 29 '14 at 16:11
  • 1
    Proof of print being a language construct is also naturally in PHP's sourcecode; see http://lxr.php.net/xref/PHP_5_6/Zend/zend_language_scanner.l#1146 as well as http://lxr.php.net/xref/PHP_5_6/Zend/zend_language_parser.y#850. – slevy1 Nov 02 '14 at 09:50
  • 3
    From w3C: The PHP print Statement: print is also a language construct, – Martin Nov 03 '14 at 19:00
  • 2
    you can `echo(print('test'))` but you cannot `print(echo('test'))` – vdegenne Jul 22 '16 at 20:13
76

They are:

  • print only takes one parameter, while echo can have multiple parameters.
  • print returns a value (1), so can be used as an expression.
  • echo is slightly faster.
Jesse
  • 6,725
  • 5
  • 40
  • 45
seanyboy
  • 5,623
  • 7
  • 43
  • 56
9

To add to the answers above, while print can only take one parameter, it will allow for concatenation of multiple values, ie:

$count = 5;

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

This is 5 values in 1 parameter

Gwenc37
  • 2,064
  • 7
  • 18
  • 22
9

I think print() is slower than echo.

I like to use print() only for situations like:

 echo 'Doing some stuff... ';
 foo() and print("ok.\n") or print("error: " . getError() . ".\n");
A J
  • 3,970
  • 14
  • 38
  • 53
grilix
  • 5,211
  • 5
  • 33
  • 34
  • Can you make it more clear , Sir ? – Legend Mar 04 '18 at 02:11
  • 1
    Wow, this is a really bad answer from nine years ago, I don't think there's any way we can improve it. Sorry! – grilix Mar 16 '18 at 01:38
  • 1
    @Legend I think @grilix is referring to the ability for print() to return 1. if the `foo()` function returns false, then the `and` part is false... so that allows the second part of the evaluation ( after the `or` ) to execute. It's an interesting use of `print` that I hadn't thought of. – Armstrongest May 24 '18 at 22:36
6

As the PHP.net manual suggests, take a read of this discussion.

One major difference is that echo can take multiple parameters to output. E.g.:

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

If you're looking to evaluate the outcome of an output statement (as below) use print. If not, use echo.

$res = print('test');
var_dump($res); //bool(true)
Johnathan Elmore
  • 2,156
  • 1
  • 19
  • 25
Ross
  • 46,186
  • 39
  • 120
  • 173
  • 5
    echo doesn't accept echo('foo','bar');, but does accept echo 'foo', 'bar'; – grilix Mar 19 '09 at 17:54
  • 3
    I know this answer is old, but doesn't `print` ALWAYS return 1? Besides, when and why would you ever need to test to be sure something printed out? That is just straight up NOT NEEDED, EVER! Quite frankly, print is useless and should be removed, in favor of ECHO! – Solomon Closson Oct 11 '13 at 01:24