Я хотел бы var_dump
вывод var_dump
в строку.
Документы PHP говорят;
Как и все, что выводит результат непосредственно в браузер, функции управления выходом могут использоваться для захвата вывода этой функции и сохранения ее в строке (например).
Может ли кто-нибудь дать мне пример того, как это может работать?
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_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);
$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, )
$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 }
$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 }