在检查
变量的内容时,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的输出结果和返回格式略有不同。哪一个最好取决于情况。在每种情况下,我认为您都应该使用适合自己目的的一种。