echo, print(), var_dump()和print_r()的区别

2017年10月19日00:15:22 发表评论 44

echo

可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。echo 不是一个函数(它是一个语言结构), 因此你不一定要使用小括号来指明参数,单引号,双引号都可以。

print()

print()打印一个值(它的参数),print() 函数比 echo() 稍慢。

print_r()

可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"\n"。因此用var_dump()函数更适合调试。

打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。

var_dump()

此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

区别与联系

echo 和 print 的区别

共同点:首先echo 和 print 都不是严格意义上的函数,他们都是 语言结构;他们都只能输出字符串,整型跟int型浮点型数据。不能打印复合型和资源型数据;

而区别是:echo 可以连续输出多个变量,而print只能一次输出一个变量。print打印的值能直接复制给一个变量,如 $a = print “123”;

而echo 不可以,它没有像函数的行为,所以不能用于函数的上下文。在使用时,echo() 函数比 print()速度稍快。

print() 并不是函数(而是语言结构) 虽然可以带括号并且有返回值;所以可以不用圆括号包围参数列表。(详情参见:http://docs.php.net/manual/zh/function.print.php

print("Hello?World");
print?"print()?also?works?without?parentheses.";

var_dump()和print_r()的区别

共同点:两者都可以打印数组,对象之类的复合型变量。

区别:print_r() 只能打印一些易于理解的信息,且print_r()在打印数组时,会将把数组的指针移到最后边,使用 reset() 可让指针回到开始处。 而var_dump()不但能打印复合类型的数据,还能打印资源类型的变量。且var_dump()输出的信息则比较详细,相比调试代码使用var_dump更便于阅读。

举例说明

(1)、4种方式输出字符串或者数字

$str="string";
?? ?echo $str; ? ? ? ? ?     //string
    print ($str);             //string
?? ?print_r($str);      //string
?? ?var_dump($str);    ?//string 'string' (length=6)

??? $str=12; ?
?? ?echo $str;        //12
?? ?print ($str);          //12
?? ?print_r($str);      //12
?? ?var_dump($str);?    // int 12

(2)、4种方式输出一维数组

$wosn_net = array(
"username"=>"wosn",
"age" ?? =>"18"
);

echo $wosn_net; ? ? ? ? ? ? // error:Array to string conversion...? ?Array
print $wosn_net; ? ? ? ? ? ? // error:Array to string conversion...? ?Array
print_r($wosn_net); ? ? ? ? //Array ( [username] => wosn [age] => 18 ) 
var_dump($wosn_net); ? ? ?//array (size=2)
 ? ?  ? ?  ? ?  ? ?  ? ?  // 'username' => string 'wosn' (length=4)
 ? ?  ? ?  ? ?  ? ?  ? ?  //'age' => string '18' (length=2)

(3)、4种方式输出多维数组

$wosn_net = array(
array("username"=>"wosn","age" ? ? ? =>"18"),
array("username"=>"wosnet","age" ? ? ?=>"19")
);
echo $wosn_net; ? ? ? ? ? ? //error:Array to string conversion ....Array
print($wosn_net); ? ? ? ? ?//error:Array to string conversion ....Array
print_r($wosn_net); ? ? ? //Array ( [0] => Array ( [username] => wosn [age] => 18 ) 
?? ? ?  ? ? ?  ? ? ?  ? ? //[1] => Array ( [username] => wosnet [age] => 19 ) ) 
var_dump($wosn_net);    //返回值如下:
//array (size=2)
//  0 => 
//    array (size=2)
//      'username' => string 'wosn' (length=4)
//      'age' => string '18' (length=2)
//  1 => 
//    array (size=2)
//      'username' => string 'wosnet' (length=6)
//      'age' => string '19' (length=2)

 

延伸拓展

printf:函数,把文字格式化以后输出,如:

$name="hunte";
 $age=25;
 printf("my name is %s, age %d", $name, $age);
 %% - 返回百分比符号
 %b - 二进制数
 %c - 依照 ASCII 值的字符
 %d - 带符号十进制数
 %e - 可续计数法(比如 1.5e+3)
 %u - 无符号十进制数
 %f - 浮点数(local settings aware)
 %F - 浮点数(not local settings aware)
 %o - 八进制数
 %s - 字符串
 %x - 十六进制数(小写字母)
 %X - 十六进制数(大写字母)

sprintf:跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。

  • 博主微信
  • 赶快加我来聊天吧
  • weinxin
  • 站长技术资源群
  • 群号:483950522
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: