php中echo,print,print_r,var_dump,var_export区别详解

php笔记 2019年03月05日

本篇笔记记录了php中echo,print,print_r,var_dump,var_export的功能、传入参数、返回值等区别,并通过范例加深了解。

功能梳理

名称功能
echo用于输出一个或多个字符串;是语言结构而不是函数;可以不使用小括号来指明参数,多个参数时不能使用小括号;支持快捷用法;没有返回值
print用于输出一个字符串;是语言结构而不是函数;只支持一个参数,可以不使用小括号;返回值总是1
print_r以人易于理解的格式打印变量;当第二个参数设置成TRUE时,返回而不打印,否则打印信息并返回TRUE
var_dump打印一个或多个变量的信息,并且带有类型;没有返回值
var_export打印变量的PHP代码表示的结构信息;第二个参数设置为TRUE时,返回而不打印,否则打印信息

echo和print比较
相同点:
1.都不是函数,而是语言结构。
2.都用于打印字符串。
3.都不能直接用于可变函数调用,如:

<?php
$param="echo";
$param("str");

这是不允许的。
不同点:
1.echo可以打印多个字符串,print只能打印一个字符串。
2.echo没有返回值,print固定返回1。
3.print不支持快捷用法。
范例:

<?php
$a = "str-a";
$b = "str-b";
$c = "str-c";
//
echo ($a);
$ret = print($a);
var_dump($ret);
echo $b;
print $b;
echo $a,$b,$c;

打印结果:

str-a
str-a
int(1)
str-b
str-b
str-astr-bstr-c

print_r,var_dump和var_export比较
相同点:
1.都用于打印变量。
2.打印对象时都不显示静态属性
不同点:
1.print_r打印变量不带类型,var_dump打印变量带有类型,var_export打印变量是以php代码表示的信息。
2.var_dump可以打印多个变量,print_r和var_export只能打印一个变量。
3.print_r有返回值,var_dump没有返回值,var_export可以设置有返回值。
范例:
打印字符串

<?php
$a = "str-a";
echo "-------开始打印-------";
$val1 = print_r($a);
$val2 = var_dump($a);
$val3 = var_export($a);
echo "-------打印返回值-------";
var_dump($val1, $val2, $val3);
echo "-------开始打印-------";
$val1 = print_r($a, true);
$val3 = var_export($a, true);
echo "-------打印返回值-------";
var_dump($val1, $val3);

输出

-------开始打印-------
str-a
string(5) "str-a"
'str-a'
-------打印返回值-------
bool(true)
NULL
NULL
-------开始打印-------
-------打印返回值-------
string(5) "str-a"
string(7) "'str-a'"

打印数组

<?php
$a = array("a" => "str-a", "b" => "str-b");
echo "-------开始打印-------";
$val1 = print_r($a);
$val2 = var_dump($a);
$val3 = var_export($a);
echo "-------打印返回值-------";
var_dump($val1, $val2, $val3);
echo "-------开始打印-------";
$val1 = print_r($a, true);
$val3 = var_export($a, true);
echo "-------打印返回值-------";
var_dump($val1, $val3);

输出

-------开始打印-------
Array
(
    [a] => str-a
    [b] => str-b
)
array(2) {
  ["a"]=>
  string(5) "str-a"
  ["b"]=>
  string(5) "str-b"
}
array (
  'a' => 'str-a',
  'b' => 'str-b',
)
-------打印返回值-------
bool(true)
NULL
NULL
-------开始打印-------
-------打印返回值-------
string(44) "Array
(
    [a] => str-a
    [b] => str-b
)
"
string(45) "array (
  'a' => 'str-a',
  'b' => 'str-b',
)"

打印对象

<?php
class testClass{
    private $a = "str-a";
    protected $b = "str-b";
    public $c = "str-c";
    static $d = "str-d";
}
$b = new testClass();
echo "-------开始打印-------";
$val1 = print_r($b);
$val2 = var_dump($b);
$val3 = var_export($b);
echo "-------打印返回值-------";
var_dump($val1, $val2, $val3);

输出

-------开始打印-------
testClass Object
(
    [a:testClass:private] => str-a
    [b:protected] => str-b
    [c] => str-c
)
object(testClass)#1 (3) {
  ["a":"testClass":private]=>
  string(5) "str-a"
  ["b":protected]=>
  string(5) "str-b"
  ["c"]=>
  string(5) "str-c"
}
testClass::__set_state(array(
   'a' => 'str-a',
   'b' => 'str-b',
   'c' => 'str-c',
))
-------打印返回值-------
bool(true)
NULL
NULL

打印资源

<?php
$c = fopen("test.php","r");

echo "-------开始打印-------";
$val1 = print_r($c);
$val2 = var_dump($c);
$val3 = var_export($c);
echo "-------打印返回值-------";
var_dump($val1, $val2, $val3);

输出

-------开始打印-------
Resource id #5
resource(5) of type (stream)
NULL
-------打印返回值-------
bool(true)
NULL
NULL