Как работает присвоение переменно объекта в php? Прошу помощи в разборе кода:var = '$assigned будет иметь это значение'; $instance = null; var_dump($instance); var_dump($reference); var_dump($assigned); // Результат # NULL # NULL # object(SimpleClass)#1 (1) { # ["var"]=>
# string(30) "$assigned будет иметь это значение" # } Хочу понять, почему собственно $assigned не стал равным null?
Происходит копирование ссылки на объект, который хранится в переменной $instance, в переменную $assigned. То есть $assigned и $instance указывают на один и тот же объект. Поэтому когда потом вы изменяете значение в свойстве объекта через $instance:
$instance->var = '$assigned будет иметь это значение';
Это изменение отражается и в переменной $assigned, так как обе переменные указывают на один и тот же объект.
Когда же вы делаете:
$instance = null;
Это обнуляет только переменную $instance, а переменная $assigned продолжает указывать на объект. Поэтому вы получаете корректный результат при выводе с помощью var_dump.
Таким образом, переменная $assigned не стала равной null, потому что она указывает на объект, который был создан ранее.
При выполнении следующей строки кода:
$assigned = $instance;Происходит копирование ссылки на объект, который хранится в переменной $instance, в переменную $assigned. То есть $assigned и $instance указывают на один и тот же объект. Поэтому когда потом вы изменяете значение в свойстве объекта через $instance:
$instance->var = '$assigned будет иметь это значение';Это изменение отражается и в переменной $assigned, так как обе переменные указывают на один и тот же объект.
Когда же вы делаете:
$instance = null;Это обнуляет только переменную $instance, а переменная $assigned продолжает указывать на объект. Поэтому вы получаете корректный результат при выводе с помощью var_dump.
Таким образом, переменная $assigned не стала равной null, потому что она указывает на объект, который был создан ранее.