What's the difference between echo, print, and print_r in PHP?
I use echo
and print_r
much, and almost never use print
.
I feel echo
is a macro, and print_r
is an alias of var_dump
.
But that's not the standard way to explain the differences.
Solution 1:
print
and echo
are more or less the same; they are both language constructs that display strings. The differences are subtle: print
has a return value of 1 so it can be used in expressions whereas echo
has a void
return type; echo
can take multiple parameters, although such usage is rare; echo
is slightly faster than print
. (Personally, I always use echo
, never print
.)
var_dump
prints out a detailed dump of a variable, including its type and the type of any sub-items (if it's an array or an object). print_r
prints a variable in a more human-readable form: strings are not quoted, type information is omitted, array sizes aren't given, etc.
var_dump
is usually more useful than print_r
when debugging, in my experience. It's particularly useful when you don't know exactly what values/types you have in your variables. Consider this test program:
$values = array(0, 0.0, false, '');
var_dump($values);
print_r ($values);
With print_r
you can't tell the difference between 0
and 0.0
, or false
and ''
:
array(4) {
[0]=>
int(0)
[1]=>
float(0)
[2]=>
bool(false)
[3]=>
string(0) ""
}
Array
(
[0] => 0
[1] => 0
[2] =>
[3] =>
)
Solution 2:
echo
- Outputs one or more strings separated by commas
-
No return value
e.g.
echo "String 1", "String 2"
- Outputs only a single string
-
Returns
1
, so it can be used in an expressione.g.
print "Hello"
or,
if ($expr && print "foo")
print_r()
- Outputs a human-readable representation of any one value
- Accepts not just strings but other types including arrays and objects, formatting them to be readable
- Useful when debugging
- May return its output as a return value (instead of echoing) if the second optional argument is given
var_dump()
- Outputs a human-readable representation of one or more values separated by commas
- Accepts not just strings but other types including arrays and objects, formatting them to be readable
- Uses a different output format to
print_r()
, for example it also prints the type of values - Useful when debugging
- No return value
var_export()
- Outputs a human-readable and PHP-executable representation of any one value
- Accepts not just strings but other types including arrays and objects, formatting them to be readable
- Uses a different output format to both
print_r()
andvar_dump()
- resulting output is valid PHP code! - Useful when debugging
- May return its output as a return value (instead of echoing) if the second optional argument is given
Notes:
- Even though
print
can be used in an expression, I recommend people avoid doing so, because it is bad for code readability (and because it's unlikely to ever be useful). The precedence rules when it interacts with other operators can also be confusing. Because of this, I personally don't ever have a reason to use it overecho
. - Whereas
echo
andprint
are language constructs,print_r()
andvar_dump()
/var_export()
are regular functions. You don't need parentheses to enclose the arguments toecho
orprint
(and if you do use them, they'll be treated as they would in an expression). - While
var_export()
returns valid PHP code allowing values to be read back later, relying on this for production code may make it easier to introduce security vulnerabilities due to the need to useeval()
. It would be better to use a format like JSON instead to store and read back values. The speed will be comparable.