如何将var_dump的结果捕获为字符串?

我想将var\u dump的输出捕获为一个字符串

PHP文档说

与将结果直接输出到浏览器的任何内容一样,输出控制函数可用于捕获此函数的输出,并将其保存为字符串(例如)

哪一个例子可以说明这一点

print\u r()不是一个有效的可能性,因为它不会提供我需要的信息

尝试导出变量

您可能希望签出var\u export——虽然它不提供与var\u dump相同的输出,但它提供了第二个$return参数,该参数将导致它返回其输出,而不是打印输出:

$debug=var\u export($my\u var,true);

为什么?

与使用ob\u startob\u get\u clean()相比,我更喜欢这一行程序。我还发现输出更容易阅读,因为它只是PHP代码

var\u dumpvar\u export之间的区别在于var\u export返回一个“变量的可解析字符串表示形式”,而var\u dump只是转储有关变量的信息。这在实践中意味着var\u export为您提供有效的PHP代码(但可能不会提供关于变量的太多信息,尤其是在使用资源时)

演示:

$demo=array(
“bool”=>错误,
“int”=>1,
“浮动”=>3.14,
“字符串”=>“你好,世界”,
“array”=>array(),
“对象”=>新stdClass(),
“资源”=>tmpfile(),
“空”=>空,
);
//var_出口——不错,一条班轮
$debug\u export=var\u export($demo,true);
//瓦鲁垃圾场
ob_start();
var_dump($demo);
$debug_dump=ob_get_clean();
//打印\u r——包括完整性,但不推荐
$debug\u printr=print\r($demo,true);

产出差异:

变量导出($debug\u export在上述示例中):

数组(
'bool'=>false,
“int”=>1,
“浮动”=>3.140000000000001,
'string'=>'hello world',
“数组”=>
排列(
),
“对象”=>
stdClass::\设置\状态(数组)(
)),
'resource'=>NULL,//请注意,此资源指针现在为NULL
“null”=>null,
)

变量转储($debug\u dump在上述示例中):

数组(8){
[“bool”]=>
布尔(假)
[“int”]=>
int(1)
[“浮动”]=>
浮动(3.14)
[“字符串”]=>
字符串(11)“你好,世界”
[“数组”]=>
数组(0){
}
[“对象”]=>
对象(stdClass)#1(0){
}
[“资源”]=>
类型(流)的资源(4)
[“空”]=>
无效的
}

打印($debug\u printr在上述示例中):

数组
(
[bool]=>
[int]=>1
[浮动]=>3.14
[string]=>你好,世界
[阵列]=>阵列
(
)
[对象]=>stdClass对象
(
)
[资源]=>资源id#4
[null]=>
)

警告:var\u export不处理循环引用

如果试图转储带有循环引用的变量,调用var\u export将导致PHP警告:

$circular=array();
$circular['self']=&amp$圆形的
var_出口(循环);

结果:

警告:var_导出不处理第3行example.php中的循环引用
排列(
“自我”=>
排列(
“self”=>空,
),
)

另一方面,当遇到循环引用时,var\u dumpprint\u r都将输出字符串*递归*

发表评论