PHP中的echo,print和print_r有什么区别?

时间:2009-10-30 00:17:04

标签: php

我使用echoprint_r很多,几乎从不使用print

我认为echo是一个宏,而print_rvar_dump的别名。

但这不是解释差异的标准方法。

11 个答案:

答案 0 :(得分:182)

printecho或多或少相同;它们都是显示字符串的语言结构。差异很微妙:print的返回值为1,因此可以在表达式中使用,而echo具有void返回类型; echo可以使用多个参数,但这种用法很少见; echo is slightly faster than print。 (就个人而言,我总是使用echo,而不是print。)

var_dump打印出变量的详细转储,包括其类型和任何子项的类型(如果它是数组或对象)。 print_r以更易于阅读的形式打印变量:不引用字符串,省略类型信息,不给出数组大小等。

根据我的经验,

var_dump在调试时通常比print_r更有用。当您不确切知道变量中的值/类型时,它尤其有用。考虑一下这个测试程序:

$values = array(0, 0.0, false, '');

var_dump($values);
print_r ($values);

使用print_r,您无法区分00.0false''

array(4) {
  [0]=>
  int(0)
  [1]=>
  float(0)
  [2]=>
  bool(false)
  [3]=>
  string(0) ""
}

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)

答案 1 :(得分:97)

<强>回声

  • 输出一个或多个以逗号分隔的字符串
  • 没有返回值

    e.g。 echo "String 1", "String 2"

打印

  • 仅输出一个字符串
  • 返回1,因此可以在表达式中使用

    e.g。 print "Hello"

    或,if ($expr && print "foo")

<强>的print_r()

  • 输出任何一个值的人类可读表示
  • 不仅接受字符串,还接受包括数组和对象在内的其他类型,将其格式化为可读
  • 调试时有用
  • 如果给出第二个可选参数
  • ,则可以将其输出作为返回值(而不是回显)返回

<强>的var_dump()

  • 输出以逗号分隔的一个或多个值的人类可读表示
  • 不仅接受字符串,还接受包括数组和对象在内的其他类型,将其格式化为可读
  • 使用不同的输出格式print_r(),例如它还会打印类型的值
  • 调试时有用
  • 没有返回值

<强> var_export()

  • 输出任何一个值的人类可读和PHP可执行表示
  • 不仅接受字符串,还接受其他类型,包括数组和对象,将它们格式化为可读
  • print_r()var_dump()使用不同的输出格式 - 结果输出是有效的PHP代码!
  • 调试时有用
  • 如果给出第二个可选参数
  • ,则可以将其输出作为返回值(而不是回显)返回

注意:

  • 尽管可以在表达式中使用print,但我建议人们避免这样做,因为它对代码可读性有害(并且因为它不太可能有用)。与其他运营商交互时的优先规则也可能令人困惑。因此,我个人没有理由在echo上使用它。
  • echoprint是语言构造,print_r()var_dump() / var_export()是常规函数。您不需要使用括号将参数括起来echoprint(如果您使用它们,它们将被视为表达式中的那些)。
  • 虽然var_export()返回有效的PHP代码,允许稍后读取值,但依赖于此代码来生成代码可能会因为需要使用eval()而更容易引入安全漏洞。最好使用类似JSON的格式来存储和读回值。速度可以比较。

答案 2 :(得分:16)

只需添加到John's answerecho就应该是您用来向页面打印内容的唯一内容。

print稍慢。 var_dump()print_r()只应用于调试。

另外值得一提的是,print_r()var_dump()默认情况下会回显,向print_r()添加第二个参数,至少评估为true以使其返回,例如print_r($array, TRUE)

回声和回归之间的区别是:

  • echo:将立即将值打印到输出。
  • returns:将函数的输出作为字符串返回。用于记录等

答案 3 :(得分:5)

echo

没有返回类型

print

有返回类型

print_r()

格式化输出,

答案 4 :(得分:3)

回声

声明不是功能 没有返回值

不需要括号

不打印数组

打印

这是真正的功能

返回类型1

需要圆括号

不打印数组

<强>的print_r

以人类可读的格式打印

不在报价中的字符串

不像类型和所有

的变量的详细信息

<强>的var_dump

变量的所有转储信息 喜欢元素类型和子元素

答案 5 :(得分:3)

echo print print_r var_dump 之间的区别非常简单。

  

回声

echo 实际上不是函数,而是用于打印输出的语言构造。比打印快一点。

echo "Hello World";    // this will print Hello World
echo "Hello ","World"; // Multiple arguments - this will print Hello World

$var_1=55;
echo "$var_1";               // this will print 55
echo "var_1=".$var_1;        // this will print var_1=55
echo 45+$var_1;              // this will print 100

$var_2="PHP";
echo "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with echo (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with echo (loop or index  value required)

您还可以在带有或不带有括号的情况下使用echo语句

echo ("Hello World");   // this will print Hello World
  

打印

就像 echo 构造 print 一样,它也是一种语言构造,而不是真正的功能。 echo print 之间的区别在于, print 仅接受单个参数,而 print 始终返回1。而< strong> echo 没有返回值。因此,可以在表达式中使用 print 语句。

print "Hello World";    // this will print Hello World
print "Hello ","World"; // Multiple arguments - NOT POSSIBLE with print
$var_1=55;
print "$var_1";               // this will print 55
print "var_1=".$var_1;        // this will print var_1=55
print 45+$var_1;              // this will print 100

$var_2="PHP";
print "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with print (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with print (loop or index  value required)

就像 echo print 一样,可以带或不带括号。

print ("Hello World");   // this will print Hello World
  

print_r

print_r()函数用于打印有关变量的人类可读信息。 如果参数是数组,则 print_r()函数将打印其键和元素(与对象相同)。

print_r ("Hello World");    // this will print Hello World

$var_1=55;
print_r ("$var_1");               // this will print 55
print_r ("var_1=".$var_1);        // this will print var_1=55
print_r (45+$var_1);              // this will print 100

$var_2="PHP";
print_r ("$var_2");                // this will print PHP

$var_3=array(99,98,97)             // this will print Array ( [0] => 1 [1] => 2 [2] => 3 ) 
$var_4=array("P"=>"3","J"=>"4");   // this will print  Array ( [P] => 3 [J] => 4 ) 
  

var_dump

var_dump 函数通常用于调试并打印有关变量/数组/对象的信息(类型和值)。

var_dump($var_1);     // this will print  int(5444) 
var_dump($var_2);     // this will print  string(5) "Hello" 
var_dump($var_3);     // this will print  array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
var_dump($var_4);     // this will print  array(2) { ["P"]=> string(1) "3" ["J"]=> string(1) "4" }

答案 6 :(得分:2)

** Echocan接受多个表达式而打印不能。   Print_r()PHP函数用于以人类可读的形式返回数组。它只是写成

![Print_r ($your_array)][1]

答案 7 :(得分:2)

echo:echo是一种语言结构,不需要使用括号,它可以使用任意数量的参数并返回void。

   void echo (param1,param2,param3.....);

   Example: echo "test1","test2,test3";

print:它是一种语言结构,不需要使用括号,只需要一个参数并返回

    1 always.

           int print(param1);

           print "test1";
           print "test1","test2"; // It will give syntax error

prinf:这是一个函数,它至少接受一个字符串和格式样式并返回输出字符串的长度。

    int printf($string,$s);

    $s= "Shailesh";
    $i= printf("Hello %s how are you?",$s);    
    echo $i;

    Output : Hello Shailesh how are you?
             27



   echo returns void so its execution is faster than print and printf

答案 8 :(得分:2)

print_r()用于以人类可读的格式打印数组。

答案 9 :(得分:0)

它们都是语言结构。 echo返回void并打印返回1. echo被认为比print更快。

答案 10 :(得分:0)

print_r()可以打印输出值,但是如果传递了第二个标志参数并且为TRUE - 它将以字符串形式返回打印结果,并且没有任何内容发送到标准输出。 关于var_dump。如果安装了XDebug调试器,那么输出结果将以更易读和易懂的方式进行格式化。