Вывод значения переменной в PHP (echo, print_r, var_dump)
В PHP есть несколько способов вывести значениепеременной, но далеко не все умеют работать со всеми типами данных. Рассмотрим разные способы.
echo
Языковая конструкция echo без проблем может выводить на страницу значение числовой или строковой перемененной. Также она может вывести значение переменной в формате DateTime, преобразовав его в строку. Но если сделать
var_dump
Функция var_dump печатает выводит содержание переменной. Заодно указывает типы данных, к которым относятся переменные. Попробуем её на практике:
array(3) < [0] =>int(5) [1] => bool(false) [2] => string(8) "Мышь" >
Функция var_dump выводит переменную с переносами строк. Поэтому обрамить результат вывода в тег pre, то код станет легче воспринимать. Попробуем сделать так
array(3) < [0] =>int(5) [1] => bool(false) [2] => string(8) "Мышь" >
В отличии от echo функция var_dump выводит абсолютно все типы данных. Часто помогает в разработке и отладке кода.
print_r
Функция print_r — это аналог функции var_dump, но в её выводе нет указания на тип данных. Попробуем её на практике:
Если вместо второго элемента массива «false» поставить true, то будет выводиться единица, а не пустое место:
Всё в одной удобной функции
Если Вы уже прочитали статью «Функции в PHP», то сможете догадаться, что лучше всего для вывода переменной сделать функцию-обёртку. Выберем для этих целей именно print_r, потому что зачастую print_r используется чаще, чем var_dump. Попробуем сделать это:
Всё готово! Теперь во время отладки и разработки можно пользоваться функцией PrintObject( ), чтобы вывести содержание переменной. Но на реальных сайтах может возникнуть небольшая проблема со стилями, которые будут влиять на содержимое блока . Эти стили можно переопределить. Поэтому чуть доработаем пример:
Этих стилей будет достаточно, чтобы выводить читаемый результат на вёрстке практически любой сложности.
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’ ;
?php
$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 ). «
» ;
var_dump
Функция отображает структурированную информацию об одном или нескольких выражениях, включая их тип и значение. Массивы и объекты анализируются рекурсивно с разным отступом у значений для визуального отображения структуры.
Все общедоступные, закрытые и защищенные свойства объекта будут возвращены при выводе, если только объект не реализует метод __debugInfo() (добавлен в PHP 5.6.0).
Как и с любой другой функцией, осуществляющей вывод непосредственно в браузер, вы можете использовать функции контроля вывода, чтобы перехватывать выводимые этой функцией данные и сохранять их, например, в 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() — Выводит строковое представление внутреннего значения zend
- var_export() — Выводит в браузер или возвращает интерпретируемое строковое представление переменной
- __debugInfo()