Как я могу захватить результат var_dump в строку?

Я хотел бы var_dump вывод var_dump в строку.

Документы PHP говорят;

Как и все, что выводит результат непосредственно в браузер, функции управления выходом могут использоваться для захвата вывода этой функции и сохранения ее в строке (например).

Может ли кто-нибудь дать мне пример того, как это может работать?

print_r() не является допустимой возможностью, потому что это не даст мне информацию, которая мне нужна.

Related of "Как я могу захватить результат var_dump в строку?"

Использовать буферизацию вывода:

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

Попробуйте var_export

Вы можете проверить var_export – в то время как он не предоставляет тот же вывод, что и var_dump он предоставляет второй параметр $return который заставит его возвращать свой результат, а не печатать его:

 $debug = var_export($my_var, true); 

Зачем?

Я предпочитаю использовать этот однострочный ob_get_clean() с помощью ob_get_clean() и ob_get_clean() . Я также считаю, что вывод немного легче читать, так как это всего лишь код PHP.

Разница между var_dump и var_export заключается в том, что var_export возвращает «синтаксическое строковое представление переменной», в то время как var_dump просто var_dump информацию о переменной. На практике это означает, что var_export дает вам действительный PHP-код (но может не дать вам столько информации об этой переменной, особенно если вы работаете с ресурсами ).

Демо-версия:

 $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 не обрабатывает циклические ссылки

Если вы пытаетесь сбросить переменную с помощью циклических ссылок, вызов 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_dump другой стороны, как var_dump и print_r var_dump строку *RECURSION* при столкновении с круговыми ссылками.

Вы также можете сделать это:

 $dump = print_r($variable, true); 

Вы также можете попробовать использовать функцию serialize() , иногда это очень полезно для отладки кукол.

Также 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(); } 

Если вы хотите взглянуть на содержимое переменных во время выполнения, подумайте об использовании реального отладчика, такого как XDebug. Таким образом, вам не нужно испортить исходный код, и вы можете использовать отладчик, даже когда обычные пользователи посещают ваше приложение. Они не заметят.

Я знаю, что этот вопрос старый, но никто не упомянул об этом.

Из руководства по PHP :

Эта функция отображает структурированную информацию об одном или нескольких выражениях, которые включают его тип и значение.

Итак, вот реальная версия return 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 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 () может очищать только последние данные, введенные во внутренний буфер. Поэтому метод 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 }