Var dump php в переменную

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

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

@Inwdr Я когда-либо использовал var_dump только для удобства отладки, и, конечно, никогда не оставлял операторов var_dump в производственном коде. Я думаю, это типично. В этих обстоятельствах производительность вряд ли будет вообще актуальна.

также удалите теги для удобства чтения (если вы просто хотите строку), используя strip_tags() , это просто вернет тип и значение.

Это хороший буквальный ответ на вопрос, так как вы «захватываете [результат] var_dump в строку» точно так же, как было задано. var_export () — лучший ответ по духу, так как в целом он имеет больше смысла.

@AlbertHendriks Ну, в ограниченных терминах, вопрос заключается в функции с именем var_dump. Мы оба знаем, что var_export лучше, но поскольку пользователь не знал об этом, когда спрашивал, мы находимся в этой точке. Как вы видите, ответ ниже с var_export теперь имеет гораздо больше голосов. Эта ситуация настолько типична во многих других сценариях, потому что обычно люди не знают, что лучше спросить, или придают большее значение тому, что они делают, чем тому, что им нужно . но хорошо, обучение созданию объектов не повредит вам ( другие) так много, и вы увидите правильный ответ ниже по той же цене 🙂

Читайте также:  Python вывод бинарного дерева

@AlbertHendriks Я предпочитаю var_dump. С включенным Xdebug вы получите симпатичное отображение данных.

Попробуйте 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 возвращает «синтаксическое строковое представление переменной», а 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 > 
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* при столкновении с круговыми ссылками.

Спасибо! Используется для использования print_r, но это лучше для отладки. error_log (var_export ($ var, true)); Все, что тебе нужно! 🙂

Это, безусловно, лучший ответ, чем принятый. Я удивлен, что у него нет больше голосов! Не могли бы вы уточнить, почему он может не дать всю информацию, которую он ищет?

@JMTyler var_export возвращает интерпретируемые строковый по существу PHP код при var_dump обеспечивает необработанный дамп данных. Так, например, если вы вызовете var_dump для целого числа со значением 1, он выведет int(1) а var_export просто выведет 1 .

не будет работать с переменными, содержащими ссылки на себя .. var_export не работает как var_dump; вот так: $ v = []; $ v [] = & $ v; var_export ($ v, true); .

Хватит обманывать людей. var_export самом деле не лучше для отладки, потому что вы не можете выполнить поиск в браузере (int) или (string) `и т. д. Он также переносит много информации в небольшое пространство, просто попробуйте: var_export(»); var_export(‘\»); , И самое главное, будьте готовы к PHP Фатальная ошибка: слишком глубокий уровень вложенности — рекурсивная зависимость? в C: \ path \ file.php в строке 75

@Pacerier Для меня первый пункт — это выгода. Я думаю, что это просто сводится к предпочтениям. Тем не менее, проблема с циклической ссылкой — это хороший момент. Я добавил комментарий об этом в свой ответ.

+1 @Pacerier этот ответ хуже, потому что он заменяет основной вопрос «как перехватить результат в строку» на «как сбросить переменные другим способом»

Источник

var_dump

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

Все общедоступные, закрытые и защищённые свойства объекта будут возвращены при выводе, если только объект не реализует метод __debugInfo().

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

Список параметров

Выражение, которое необходимо отобразить.

Следующие выражения для отображения.

Возвращаемые значения

Функция не возвращает значения после выполнения.

Примеры

Пример #1 Пример использования var_dump()

Результат выполнения данного примера:

array(3) < [0]=>int(1) [1]=> int(2) [2]=> array(3) < [0]=>string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" > >

$b = 3.1 ;
$c = true ;
var_dump ( $b , $c );

Результат выполнения данного примера:

Смотрите также

  • print_r() — Выводит удобочитаемую информацию о переменной
  • debug_zval_dump() — Выводит строковое представление внутренней структуры zval
  • var_export() — Выводит или возвращает интерпретируемое строковое представление переменной
  • __debugInfo()

User Contributed Notes 16 notes

Keep in mind if you have xdebug installed it will limit the var_dump() output of array elements and object properties to 3 levels deep.

To change the default, edit your xdebug.ini file and add the folllowing line:
xdebug.var_display_max_depth=n

If you’re like me and uses var_dump whenever you’re debugging, you might find these two «wrapper» functions helpful.

This one automatically adds the PRE tags around the var_dump output so you get nice formatted arrays.

function var_dump_pre ( $mixed = null ) echo ‘

' ; 
var_dump ( $mixed );
echo '

‘ ;
return null ;
>

?>

This one returns the value of var_dump instead of outputting it.

function var_dump_ret ( $mixed = null ) ob_start ();
var_dump ( $mixed );
$content = ob_get_contents ();
ob_end_clean ();
return $content ;
>

?>

Fairly simple functions, but they’re infinitely helpful (I use var_dump_pre() almost exclusively now).

I post a new var_dump function with colors and collapse features. It can also adapt to terminal output if you execute it from there. No need to wrap it in a pre tag to get it to work in browsers.

function dump_debug ( $input , $collapse = false ) $recursive = function( $data , $level = 0 ) use (& $recursive , $collapse ) global $argv ;

echo ‘‘ . «\n» ;
>

$type = ! is_string ( $data ) && is_callable ( $data ) ? «Callable» : ucfirst ( gettype ( $data ));
$type_data = null ;
$type_color = null ;
$type_length = null ;

switch ( $type ) case «String» :
$type_color = «green» ;
$type_length = strlen ( $data );
$type_data = «\»» . htmlentities ( $data ) . «\»» ; break;

case «Double» :
case «Float» :
$type = «Float» ;
$type_color = «#0099c5» ;
$type_length = strlen ( $data );
$type_data = htmlentities ( $data ); break;

case «Integer» :
$type_color = «red» ;
$type_length = strlen ( $data );
$type_data = htmlentities ( $data ); break;

case «Boolean» :
$type_color = «#92008d» ;
$type_length = strlen ( $data );
$type_data = $data ? «TRUE» : «FALSE» ; break;

case «NULL» :
$type_length = 0 ; break;

case «Array» :
$type_length = count ( $data );
>

if ( in_array ( $type , array( «Object» , «Array» ))) $notEmpty = false ;

foreach( $data as $key => $value ) if (! $notEmpty ) $notEmpty = true ;

if ( $isTerminal ) echo $type . ( $type_length !== null ? «(» . $type_length . «)» : «» ). «\n» ;

> else $id = substr ( md5 ( rand (). «:» . $key . «:» . $level ), 0 , 8 );

call_user_func ( $recursive , $value , $level + 1 );
>

> else echo $isTerminal ?
$type . ( $type_length !== null ? «(» . $type_length . «)» : «» ) . » » :
«» . $type . ( $type_length !== null ? «(» . $type_length . «)» : «» ) . «  » ;
>

> else echo $isTerminal ?
$type . ( $type_length !== null ? «(» . $type_length . «)» : «» ) . » » :
«» . $type . ( $type_length !== null ? «(» . $type_length . «)» : «» ) . «  » ;

call_user_func ( $recursive , $input );
>
?>

As Bryan said, it is possible to capture var_dump() output to a string. But it’s not quite exact if the dumped variable contains HTML code.

echo ‘

' ; // This is for correct handling of newlines 
ob_start ();
var_dump ( $var );
$a = ob_get_contents ();
ob_end_clean ();
echo htmlspecialchars ( $a , ENT_QUOTES ); // Escape every HTML special chars (especially > and < )
echo '

‘ ;
?>

/**
* Better GI than print_r or var_dump — but, unlike var_dump, you can only dump one variable.
* Added htmlentities on the var content before echo, so you see what is really there, and not the mark-up.
*
* Also, now the output is encased within a div block that sets the background color, font style, and left-justifies it
* so it is not at the mercy of ambient styles.
*
* Inspired from: PHP.net Contributions
* Stolen from: [highstrike at gmail dot com]
* Modified by: stlawson *AT* JoyfulEarthTech *DOT* com
*
* @param mixed $var — variable to dump
* @param string $var_name — name of variable (optional) — displayed in printout making it easier to sort out what variable is what in a complex output
* @param string $indent — used by internal recursive call (no known external value)
* @param unknown_type $reference — used by internal recursive call (no known external value)
*/
function do_dump (& $var , $var_name = NULL , $indent = NULL , $reference = NULL )
$do_dump_indent = «|    » ;
$reference = $reference . $var_name ;
$keyvar = ‘the_do_dump_recursion_protection_scheme’ ; $keyname = ‘referenced_object_name’ ;

$type = ucfirst ( gettype ( $avar ));
if( $type == «String» ) $type_color = «» ;
elseif( $type == «Integer» ) $type_color = «» ;
elseif( $type == «Double» )< $type_color = "" ; $type = "Float" ; >
elseif( $type == «Boolean» ) $type_color = «» ;
elseif( $type == «NULL» ) $type_color = «» ;

if( is_array ( $avar ))
$count = count ( $avar );
echo » $indent » . ( $var_name ? » $var_name => » : «» ) . » $type ( $count )
$indent (
» ;
$keys = array_keys ( $avar );
foreach( $keys as $name )
$value = & $avar [ $name ];
do_dump ( $value , «[‘ $name ‘]» , $indent . $do_dump_indent , $reference );
>
echo » $indent )
» ;
>
elseif( is_object ( $avar ))
echo » $indent$var_name $type
$indent (
» ;
foreach( $avar as $name => $value ) do_dump ( $value , » $name » , $indent . $do_dump_indent , $reference );
echo » $indent )
» ;
>
elseif( is_int ( $avar )) echo » $indent$var_name = $type (» . strlen ( $avar ). «) $type_color » . htmlentities ( $avar ). «
» ;
elseif( is_string ( $avar )) echo » $indent$var_name = $type (» . strlen ( $avar ). «) $type_color \»» . htmlentities ( $avar ). «\»
» ;
elseif( is_float ( $avar )) echo » $indent$var_name = $type (» . strlen ( $avar ). «) $type_color » . htmlentities ( $avar ). «
» ;
elseif( is_bool ( $avar )) echo » $indent$var_name = $type (» . strlen ( $avar ). «) $type_color » .( $avar == 1 ? «TRUE» : «FALSE» ). «
» ;
elseif( is_null ( $avar )) echo » $indent$var_name = $type (» . strlen ( $avar ). «) < $type_color >NULL
» ;
else echo » $indent$var_name = $type (» . strlen ( $avar ). «) » . htmlentities ( $avar ). «
» ;

Источник

Оцените статью