最好用于var_dump,var_export,print_r,调试! ??


在检查

变量的内容时,PHP使用var_dump,var_export,print_r等。哪一种是最佳使用方式?
在确认两者之间的差异时,我想考虑一下。

var_dump

var_dump —转储有关变量的信息
此函数返回有关给定表达式的结构化信息,包括其类型和值。对于数组,将递归搜索每个值以显示其结构。

来源:PHP:var_dump-手册
var_dump转储有关变量的信息,并详细输出数组等元素的数量和值的数据类型。没有返回值。

1
2
3
4
5
6
7
<?php
$array = array(
    'key1' => 'hoge_1',
    'key2' => 'hoge_2',
    'key3' => 'hoge_3'
);
var_dump($array);

输出结果

1
2
3
4
5
6
7
8
array(3) {
  ["key1"]=>
  string(6) "hoge_1"
  ["key2"]=>
  string(6) "hoge_2"
  ["key3"]=>
  string(6) "hoge_3"
}

var_export

var_export —输出或返回变量的字符串表示形式
var_export()返回有关传递的变量的结构化信息。该函数类似于var_dump(),不同之处在于返回的表示形式是有效的PHP代码。

来源:PHP:var_export-手册
var_export与var_dump相似,但是返回的表达式是有效的PHP代码,因此您可以按原样粘贴它。与var_dump不同,通过在第二个参数中指定true,您可以将结果作为返回值返回而不是输出。

1
2
3
4
5
6
7
<?php
$array = array(
    'key1' => 'hoge_1',
    'key2' => 'hoge_2',
    'key3' => 'hoge_3'
);
var_export($array);

输出结果

1
2
3
4
5
array (
  'key1' => 'hoge_1',
  'key2' => 'hoge_2',
  'key3' => 'hoge_3',
)

print_r

print_r —以易于理解的方式打印有关指定变量的信息。
print_r()以易于理解的格式打印有关变量值的信息。

来源:PHP:print_r-手册
print_r以一种易于理解的方式打印有关变量的信息,因此当您只想检查数组的键和值时可以使用它。输出类似于var_export,但是不会返回有效的PHP代码,因此您不能仅粘贴和使用它。与var_export一样,通过为第二个参数指定true,您可以将结果作为返回值返回而不是输出。

1
2
3
4
5
6
7
<?php
$array = array(
    'key1' => 'hoge_1',
    'key2' => 'hoge_2',
    'key3' => 'hoge_3'
);
print_r($array);

输出结果

1
2
3
4
5
6
Array
(
    [key1] => hoge_1
    [key2] => hoge_2
    [key3] => hoge_3
)

如果要详细检查数据类型等,则var_dump

var_dump与var_export和prin_r不同,它还输出详细信息,例如数组元素的数量和数据类型,因此,如果要检查详细信息,则应使用var_dump。

如果只想查看数组的键和值,则var_export或print_r

如果尝试检查

数组的内容,则var_export和print_r的结果相似,因此您应该使用其中之一。坦率地说,如果要使用有效的PHP代码获得结果,请使用var_export,否则请使用print_r。

如果要分配给变量,则var_export或print_r

var_export和print_r可以通过将第二个参数设置为true来返回返回值,因此,如果要将其分配给变量,则应使用var_export或print_r。同样,在这种情况下,如果要使用有效的PHP代码获取并使用它,请使用var_export,否则请使用print_r。

1
2
3
4
5
6
7
8
9
10
<?php
$array = array(
    'key1' => 'hoge_1',
    'key2' => 'hoge_2',
    'key3' => 'hoge_3'
);
//var_exportの結果を変数に代入
$var_export_result = var_export($array,true);
//print_rの結果を変数に代入
$print_r_result = print_r($array,true);

输出到日志文件时...

当打印到

日志文件时,var_export和print_r易于实现。
由于可以返回返回值,因此请使用PHP标准函数

的error_log函数

使用var_export和print_r时输出到日志文件

1
2
3
4
5
6
7
8
9
10
<?php
$array = array(
    'key1' => 'hoge_1',
    'key2' => 'hoge_2',
    'key3' => 'hoge_3'
);
//var_exportの場合
error_log(var_export($array, true), 3, "./debug.txt");
//print_rの場合
error_log(print_r($array, true), 3, "./debug.txt");

可以如上所述在一行中实现。
但是,您可能需要在日志文件中保留详细信息,例如数据类型。
在这种情况下,请使用var_dump并使用ob_start启用标准输出的缓冲。

使用var_dump时输出到日志文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$array = array(
    'key1' => 'hoge_1',
    'key2' => 'hoge_2',
    'key3' => 'hoge_3'
);
//バッファへの出力開始
ob_start();
//配列をダンプ
var_dump($array);
//バッファの内容を変数に代入
$content = ob_get_contents();
// バッファの終了
ob_end_clean();
error_log($content,3,'./debug.txt');

摘要

var_dump,var_export和print_r的输出结果和返回格式略有不同。哪一个最好取决于情况。在每种情况下,我认为您都应该使用适合自己目的的一种。