How are echo and print different in PHP?
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");
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.
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
From: http://web.archive.org/web/20090221144611/http://faqts.com/knowledge_base/view.phtml/aid/1/fid/40
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.
Expression.
print()
behaves like a function in that you can do:$ret = print "Hello World"
; And$ret
will be1
. 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.
- Parameter(s). The grammar is:
echo expression [, expression[, expression] ... ]
Butecho ( 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";