我怎样才能捕获到一个stringvar_dump的结果?

我想捕获var_dump的输出到一个string。

PHP文档说,

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

有人能给我一个例子,说明如何工作?

print_r()不是一个有效的可能性,因为它不会给我所需要的信息。

使用输出缓冲:

 <?php ob_start(); var_dump($someVar); $result = ob_get_clean(); ?> 

尝试var_export

你可能想要检查一下var_export – 虽然它不提供与var_dump相同的输出,但是它提供了第二个$return参数,这将导致它返回它的输出而不是打印它:

 $debug = var_export($my_var, true); 

为什么?

我更喜欢使用ob_startob_get_clean() 。 我也发现输出有点容易阅读,因为它只是PHP代码。

var_dumpvar_export之间的区别在于, var_export返回“variables的可分析string表示”,var_dump只是简单地转储有关variables的信息。 这在实践中意味着var_export为您提供了有效的PHP代码(但是可能无法提供有关该variables的更多信息,特别是在使用资源时 )。

演示:

 $demo = array( "bool" => false, "int" => 1, "float" => 3.14, "string" => "hello world", "array" => array(), "object" => new stdClass(), "resource" => tmpfile(), "null" => null, ); // var_export -- nice, one-liner $debug_export = var_export($demo, true); // var_dump ob_start(); var_dump($demo); $debug_dump = ob_get_clean(); // print_r -- included for completeness, though not recommended $debug_printr = print_r($demo, true); 

输出的差异:

var_export(上例中的$debug_export ):

  array ( 'bool' => false, 'int' => 1, 'float' => 3.1400000000000001, 'string' => 'hello world', 'array' => array ( ), 'object' => stdClass::__set_state(array( )), 'resource' => NULL, // Note that this resource pointer is now NULL 'null' => NULL, ) 

var_dump(上例中的$debug_dump ):

  array(8) { ["bool"]=> bool(false) ["int"]=> int(1) ["float"]=> float(3.14) ["string"]=> string(11) "hello world" ["array"]=> array(0) { } ["object"]=> object(stdClass)#1 (0) { } ["resource"]=> resource(4) of type (stream) ["null"]=> NULL } 

print_r(上面例子中的$debug_printr ):

 Array ( [bool] => [int] => 1 [float] => 3.14 [string] => hello world [array] => Array ( ) [object] => stdClass Object ( ) [resource] => Resource id #4 [null] => ) 

警告: var_export不处理循环引用

如果您正尝试转储具有循环引用的variables,则调用var_export将导致PHP警告:

  $circular = array(); $circular['self'] =& $circular; var_export($circular); 

结果是:

  Warning: var_export does not handle circular references in example.php on line 3 array ( 'self' => array ( 'self' => NULL, ), ) 

另一方面,当遇到循环引用时, var_dumpprint_r将输出string*RECURSION*

你也可以这样做:

 $dump = print_r($variable, true); 

你也可以尝试使用serialize()函数,有时对于debuggingpuprposes非常有用。

echo json_encode($dataobject); 可能会有帮助

 function return_var_dump(){ //works like var_dump, but returns a string instead of printing it. $args=func_get_args(); //for <5.3.0 support ... ob_start(); call_user_func_array('var_dump',$args); return ob_get_clean(); } 

如果您想在运行时查看variables内容,请考虑使用像XDebug这样的真正的debugging器。 这样你就不需要弄乱你的源代码,甚至在普通用户访问你的应用程序时也可以使用debugging器。 他们不会注意到。

我知道这个问题很老,但没有人提到这一点。

从PHP手册 :

此function显示关于一个或多个expression式的结构化信息,包括其types和值。

所以,这里是PHP的var_dump()实际返回版本,它实际上接受一个可变长度的参数列表。

 function var_dump_str() { $argc = func_num_args(); $argv = func_get_args(); if ($argc > 0) { ob_start(); call_user_func_array('var_dump', $argv); $result = ob_get_contents(); ob_end_clean(); return $result; } return ''; } 

干杯。

这里是作为function的完整解决scheme。

 function varDumpToString ($var) { ob_start(); var_dump($var); return ob_get_clean(); } 

http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html

var_dump和print_r函数只能直接输出到浏览器。 所以这些函数的输出只能通过使用php的输出控制函数来获取。 下面的方法可能有助于保存输出。

 function assignVarDumpValueToString($object) { ob_start(); var_dump($object); $result = ob_get_clean(); return $result; } 

ob_get_clean()只能清除input到内部缓冲区的最后一个数据。 所以如果你有多个条目,ob_get_contents方法将会很有用。

从上面的同一来源:

 function varDumpToErrorLog( $var=null ){ ob_start(); // start reading the internal buffer var_dump( $var); $grabbed_information = ob_get_contents(); // assigning the internal buffer contents to variable ob_end_clean(); // clearing the internal buffer. error_log( $grabbed_information); // saving the information to error_log }