php中var_dump、var_export和print_r的用法区别
void var_dump ( mixed $expression [, mixed $... ] )
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。在PHP5里,所有的public、private和protected属性都会被返回输出。
-------------------------------------------------------------
mixed var_export ( mixed $expression [, bool $return ] )
输出或返回一个变量的字符串表示。此函数返回关于传递给改函数的变量的结构信息,它和var_dump()类似,不同的是其返回的表示是合法的PHP代码。
当第二个参数设置位TRUE,可以将返回的变量表示复制给一个变量。
var_export在处理一些递归的结构时会报错,但var_dump不会,因为它可以避免递归的引用。比如:var_export($GLOBALS);会报错,var_dump($GLOBALS);则可以运行。
-------------------------------------------------------------
bool print_r ( mixed $expression [, bool $return ] )
显示关于变量的易于理解的信息。如果给出的事string、integer或float,将打印变量值本身。如果给出的事array,将会按照一定的格式显示键和元素。object与数组类似。记住,print_r()将把数组的指针移到最后边,使用reset()可让指针回到开始处。第二个参数设置为TRUE则可以返回为字符串,可以赋值给变量。
下面对比下三者对数组的输出
$array = array(1, 2, array('a', 'b', 'c')); var_export($array); /* 输出: array ( 0 => 1, 1 => 2, 2 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), ) */ print_r($array); /* 输出: Array ( [0] => 1 [1] => 2 [2] => Array ( [0] => a [1] => b [2] => c ) ) */ var_dump($array); /* 输出: array (size=3) 0 => int 1 1 => int 2 2 => array (size=3) 0 => string 'a' (length=1) 1 => string 'b' (length=1) 2 => string 'c' (length=1) */
下面对比下三者对变量的输出
$var = 'string'; var_dump($var); /* 输出: string 'string' (length=6) */ var_export($var); /* 输出: 'string' */ print_r($var); /* 输出: string */
-------------------------------------------------------------
下面对比下三者对资源的输出
$handle = fopen('log.txt', 'r'); var_dump($handle); /* 输出: resource(3, stream) */ var_export($handle); /* 输出: NULL */ print_r($handle); /* 输出: Resource id #3 */
-------------------------------------------------------------
下面对比下三者对布尔变量的输出
$a = TRUE; var_dump($a); /* 输出: boolean true */ var_export($a); /* 输出: true */ print_r($a); /* 输出: 1 */
-------------------------------------------------------------
下面对比下三者对对象的输出
$obj = new obj(); var_dump($obj); /* 输出: object(b)[1] private 'data' => null */ var_export($obj); /* 输出: obj::__set_state(array( 'data' => NULL, )) */ print_r($obj); /* 输出: obj Object ( [data:obj:private] => ) */