Как я могу захватить результат дампа var в строку?
Я хотел бы захватить выход var_dump в строку.
PHP docs говорят;
Как и все, что выводит его прямо в браузере, тег функции управления выходом может использоваться для захвата вывода этой функции и сохранения его в строке (например).
может кто-нибудь дать мне пример, как это может работать?
print_r() не является допустимой возможностью, потому что это не собираюсь давать мне информацию, которая мне нужна.
11 ответов:
попробовать
var_exportвы можете ознакомиться
var_export- в то время как он не обеспечивает тот же выход, что иvar_dumpон обеспечивает второй$returnпараметр, который заставит его возвращать свой вывод, а не печатать его:$debug = var_export($my_var, true);почему?
я предпочитаю этот один лайнер для использования
ob_startиob_get_clean(). Я также считаю, что вывод немного легче читать, так как это просто PHP-код.в разница между
var_dumpиvar_exportэтоvar_exportвозвращает a "разборное строковое представление переменной" покаvar_dumpпросто выводит информацию о переменной. На практике это означает, чтоvar_exportдает вам действительный PHP-код (но может не дать вам столько информации о переменной, особенно если вы работаете с ресурсы).Demo:
$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, )вложенностями (
$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иprint_r, С другой стороны, выведет строку*RECURSION*при столкновении с круговыми ссылками.
вы также можете попробовать использовать
serialize()функция, иногда это очень полезно для отладки puprposes.
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(); }
Я знаю, что этот вопрос старый, но никто не упомянул этот момент.
эта функция отображает структурированную информацию об одном или нескольких выражениях, включая их тип и значение.
вот это реальные вернуть версию 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 ''; }Ура.
Если вы хотите взглянуть на содержимое переменных во время выполнения, рассмотрите возможность использования реального отладчика, такого как XDebug. Таким образом, вам не нужно испортить исходный код, и вы можете использовать отладчик, даже если обычные пользователи посещают ваше приложение. Они не заметят.
вот полное решение как функция.
function varDumpToString ($var) { ob_start(); var_dump($var); return ob_get_clean(); }
Это может быть немного не по теме.
Я искал способ записать такую информацию в журнал Docker моего контейнера PHP-FPM и придумал фрагмент ниже. Я уверен, что это может быть использовано пользователями Docker PHP-FPM.
fwrite(fopen('php://stdout', 'w'), var_export($object, true));
от 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 }
Comments