Я прочитал много статей о том, как построить переменные внутри машины Zend и нашел одну интересную вещь, которую я не могу объяснить:
$int = 100;
xdebug_debug_zval('int'); /// int:(refcount=1,is_ref=0),int 100
$int = &$int;
xdebug_debug_zval('int'); /// int:(refcount=1,is_ref=1),int 100
Как выясняется, мы сами создаем ссылку? Как это возможно?
Очистить информацию от того, что я знаю:
Как правило, is_ref = 1
, только когда контейнер ссылается на zval две или более переменных жесткой ссылки.
refcount
- количество переменных относится к одному и тому же контейнеру zval, но разница в том, что пересчет для разных работает с is_ref = 0
и is_ref = 1
.
Если is_ref = 0
и refcount > 1
при создании жестких ссылок мы получаем новый zval-контейнер, если мы выполняем присвоение значением - новый zval-контейнер не будет создан.
Если is_ref = 1
и refcount > 1
при создании жестких ссылок новый zval не создается, используется старый. если мы не создаем жесткую ссылку, но присваиваем ее значением - это означает, что мы создали новый контейнер zval.
P.S Я написал это, чтобы показать, что понимаю, что я спрашиваю и показываю, почему я не понимаю поведение кода, который я написал выше