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


197

我用echoprint_r多,而且几乎从来不使用print

我感觉echo是一个宏,并且print_r是的别名var_dump

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


3
print_r并不是var_dump的别名-它以不同的格式输出。值得注意的是,var_dump的输出还包括每个变量的“类型”。
thomasrutter


要添加的另一个有用的细节可能是var_dump截断很长的文本,显示...并指示剩余的长度,例如:甚至'...(length = 4482)如果使用echo则不会发生。
Yordan

Answers:


186

printecho或多或少是相同的; 它们都是显示字符串的语言构造。的差异是细微的:print具有1的返回值,因此它可以在表达式中使用,而echo具有void返回类型; echo可以使用多个参数,尽管这种用法很少见;echo比快一点print。(就我个人而言,我总是使用echo,从不print。)

var_dump打印出变量的详细转储,包括变量的类型和任何子项的类型(如果是数组或对象)。print_r以更易于理解的形式打印变量:不引号,不省略类型信息,不提供数组大小等。

var_dumpprint_r根据我的经验,通常比调试时有用。当您不完全知道变量中具有哪些值/类型时,它特别有用。考虑以下测试程序:

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

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

随着print_r你不能告诉之间的区别00.0,或false''

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

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

1
什么是语言结构?
OMG

1
@Shore-这是语言内置的东西,不是功能。它们通常非常快,并且不能完全像正常功能那样运行。
亚历克斯

3
两年后编辑,以更正这些注释中标识的不准确性。谢谢大家,我一定是在10年6月7日睡觉。;-)
John Kugelman


5
快,给律师手机!
约翰·库格曼

100

回声

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

    例如 echo "String 1", "String 2"

打印

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

    例如 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()是常规函数。您不需要括号来将参数括在echo或上print(并且如果您确实使用它们,它们将在表达式中被视为对待)。
  • 虽然var_export()返回有效的PHP代码以允许以后读取值,但由于需要使用,因此在生产代码中依靠此值可能会更容易引入安全漏洞eval()。最好使用JSON之类的格式来存储和读取值。速度将是可比的。

3
简要说明一下何时可以使用echo $a, $b;语法echo $a . $b;:如果$ a或$ b是很大的字符串,则后者会占用额外的内存,并且会花一些时间在内存中创建字符串的单独串联版本可以开始输出到浏览器。
thomasrutter 2014年

当然,您也可以使用echo $a; echo $b;
thomasrutter 2014年

16

仅添加到John的答案中echo应该是您用来在页面上打印内容的唯一方法。

print稍微慢一点。var_dump()并且print_r()只能用于调试。

还值得一提的是,print_r()并且var_dump()默认情况下会回显print_r(),请至少在其上添加第二个参数,该参数的计算结果为true,以使其返回,例如print_r($array, TRUE)

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

  • echo:将立即将值打印到输出。
  • returning:将以字符串形式返回函数的输出。对日志记录等有用。

仅仅因为您提出了这个问题,echoing和returning有什么区别?
大卫说,

2
哇,我希望我知道返回的参数:(基本上,您可以执行$ foo = print_r($ array,true);并以其他方式使用它(将其用于日志,表格等)
FryGuy

print_r在编写PHP时,我已经使用了很多返回参数。但是,我倾向于写print_r( $foo, 1 );。键入它会更快;)对此,我不太在意可读性,因为我发现该名称print_r也不具有很好的描述性。
exhuma 2010年

var_dump()不支持第二个参数print_r(),因为它var_dump()可以接受多个参数以输出,因此它不像第二个参数那样返回值。
thomasrutter

@thomasrutter是的,不知道我为什么写那个。
亚历克斯

6
echo

没有退货类型

print

有退货类型

print_r()

输出为格式化的


5

echoprintprint_rvar_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构造打印一样,它也是一种语言构造,而不是真正的功能。之间的差别回波打印打印 只接受一个参数,并打印总是返回1.鉴于回声没有返回值。因此可以在表达式中使用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" }

3

回声

是语句不是函数没有返回值

不需要括号

不打印阵列

打印

是实功能

返回类型1

必填括号

不打印阵列

打印_r

以人类可读的格式打印

字符串不在引号中

没有类型和全部变量的详细信息

var_dump

变量的所有转储信息,例如元素和子元素的类型


2
这个答案有很多问题。 print不是一个真正的功能,它是一个语言结构就像回声。它也可以用作语句。 echo不是一份声明中,也不能在一个被使用。 print要求括号,也没有任何回音或打印使用圆括号等不会的功能。您还错过了主要区别之一-echo接受多个字符串以逗号分隔回显。
thomasrutter 2014年

2
...,并且当几个答案已经存在并且包含正确的信息时,您提交了这个答案。
thomasrutter

2

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

![Print_r ($your_array)][1]

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


0

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


-1

它们都是语言构造。echo返回void,而print返回1.回声被认为比print快一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.