我想将var\u dump的输出捕获为一个字符串
PHP文档说
与将结果直接输出到浏览器的任何内容一样,输出控制函数可用于捕获此函数的输出,并将其保存为字符串(例如)
哪一个例子可以说明这一点
print\u r()不是一个有效的可能性,因为它不会提供我需要的信息
尝试导出变量
您可能希望签出var\u export——虽然它不提供与var\u dump相同的输出,但它提供了第二个$return参数,该参数将导致它返回其输出,而不是打印输出:
$debug=var\u export($my\u var,true);
为什么?
与使用ob\u start和ob\u get\u clean()相比,我更喜欢这一行程序。我还发现输出更容易阅读,因为它只是PHP代码
var\u dump和var\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']=&$圆形的
var_出口(循环);
结果:
警告:var_导出不处理第3行example.php中的循环引用
排列(
“自我”=>;
排列(
“self”=>;空,
),
)
另一方面,当遇到循环引用时,var\u dump和print\u r都将输出字符串*递归*