debug_zval_dump
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
debug_zval_dump — Выводит строковое представление внутреннего значения zend
Описание
Выводит строковое представление внутреннего значения zend.
Список параметров
-
variable
-
Обрабатываемая переменная.
Возвращаемые значения
Эта функция не возвращает значения после выполнения.
Примеры
Пример #1 Пример использования debug_zval_dump()
<?php
$var1 = 'Hello World';
$var2 = '';
$var2 =& $var1;
debug_zval_dump(&$var1);
?>
Результат выполнения данного примера:
&string(11) "Hello World" refcount(3)
Замечание: Предостережение по поводу refcount
Значение refcount, возвращаемое этой функцией, в некоторых случаях неочевидно. Например, разработчик может ожидать, что в приведенном выше примере значение refcount будет 2. Третья ссылка была создана в момент вызова debug_zval_dump().
Это поведение более сложно, когда переменная не передается в функцию debug_zval_dump() по ссылке. Для иллюстрации рассмотрим немного измененный вариант приведенного выше примера:
<?php
$var1 = 'Hello World';
$var2 = '';
$var2 =& $var1;
debug_zval_dump($var1); // в этот раз не передается по ссылке
?>Результат выполнения данного примера:
string(11) "Hello World" refcount(1)Почему refcount(1)? Потому что копия $var1 создается при вызове функции.
Эта функция становится еще более сбивающей с толку, когда передается переменная со значением refcount, равным 1 (копированием по значению):
<?php
$var1 = 'Hello World';
debug_zval_dump($var1);
?>Результат выполнения данного примера:
string(11) "Hello World" refcount(2)Значение refcount, равное 2, в данном случае совсем непонятно. Особенно учитывая приведенные выше примеры. Так в чем же дело?
Когда переменная имеет единственную ссылку (как было с переменной $var1, перед тем, как ее передали в качестве аргумента в функцию debug_zval_dump()), процессор PHP оптимизирует метод, которым она передается в функцию. Внутренне, PHP рассматривает $var1 как ссылку (таким образом refcount увеличивается для области видимости функции), при условии, что если в переданную ссылку придется производить запись, то будет создана ее копия, но только в момент записи. Такое поведение известно как "copy on write."
Таким образом, если debug_zval_dump() приходится писать в свой единственный параметр (а она не делает этого), то будет создана копия. До этого момента параметр остается ссылкой, приводя к увеличению refcount до 2 в области видимости вызова функции.
Смотрите также
- var_dump() - Выводит информацию о переменной
- debug_backtrace() - Выводит стек вызовов функций в массив
- "Ссылки. Разъяснения"
- "» Ссылки. Разъяснения (от Derick Rethans)"
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Функции для работы с переменными
- boolval
- debug_zval_dump
- doubleval
- empty
- floatval
- get_defined_vars
- get_resource_type
- gettype
- import_request_variables
- intval
- is_array
- is_bool
- is_callable
- is_double
- is_float
- is_int
- is_integer
- is_long
- is_null
- is_numeric
- is_object
- is_real
- is_resource
- is_scalar
- is_string
- isset
- print_r
- serialize
- settype
- strval
- unserialize
- unset
- var_dump
- var_export
Коментарии
If you're finding the interpretation of refcount confusing, the Xdebug extension offers a function similar to this one, but because the variable name is passed as a string, xdebug_debug_zval() doesn't scribble on the refcount with its own references to the zval.