Я попытаюсь осветить функцию debug_zval_dump()
и способ обработки ваших переменных. Не убивай меня, если я ошибаюсь:) ...
$var = 1;
debug_zval_dump($var);
Я думаю, что функция отладки считает $var
refcount (1) и 1 refcount (2), поскольку 1 - это значение $var
.
Если вы посмотрите на это логически, вы на самом деле говорите это.
1 = 1;
debug_zval_dump(1);
Вторая часть:
$var = 1;
$var_dup = &$var;
debug_zval_dump($var);exit;
Здесь вы видите, что вы установили $var
на $var_dup
, но сохранили его значение. Счет возврата $var
равен 1, поскольку вы «связали» его с $var_dup
.
$var = 2;
$var_dup = &$var; //or $var = &$var_dup; (doesn't matter which one)
$var = 3;
debug_zval_dump($var_dup);exit;
Это дает long(3) refcount(1)
... Почему это рефконт 1? Как вы можете видеть, значение $ var_dup никогда не было присвоено 3, должно быть 2, верно? Нет, не должно, потому что вы держите его в актуальном состоянии с & $ var. Это означает, что когда вы переходите $var = 4
между $var = 3
и debug_zval_dump($var_dup);exit;
, значение $ var_dup будет обновляться автоматически, потому что вы связали их, что делает его 1 повторным счетом.
Тогда есть другое происшествие:
$var = 2;
$var_dup = $var;
$var = 4;
debug_zval_dump($var_dup);exit;
Вывод этого: long(2) refcount(2)
.
Как видите, значение $ var_dup является правильным. $ var было 2, значение было передано через $ var_dup, и он придерживался его. Значение по умолчанию равно 2, потому что это число $var = 4;
и $var_dup = $var;
.
Когда мы удаляем $var = 4;
, мы получаем это:
$var = 2;
$var_dup = $var;
debug_zval_dump($var_dup);exit;
Вывод этого: long(2) refcount(3)
.
Теперь функция отладки рассчитывает следующее: $var_dup
(1), =$var
(2) (поскольку $ var_dup был создан из $ var) и $var
(= 2;
) (3).
Я надеюсь, вы понимаете, о чем я. На мой взгляд, это больше математика, чем программирование, так что это может быть причиной того, что это сложная функция для понимания.
И снова, если я ошибаюсь, не убивайте меня:) ...
Привет,
Mixxiphoid
Ответственность
Я не знаю, какова цель этой функции. Я на самом деле никогда не слышал об этом до сегодняшнего дня. Поэтому я не несу ответственности за ненадлежащее использование:).