@dontagr

Как работает присвоение переменно объекта в php?

Прошу помощи в разборе кода:

<?php
class SimpleClass {
	public $var;
}

$instance = new SimpleClass();

$assigned   =  $instance;
$reference  =& $instance;

$instance->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?
  • Вопрос задан
  • 4122 просмотра
Решения вопроса 1
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Почитайте про zval и call-by-reference в PHP (основы подсчета ссылок).

После присвоения нового значения свойству изначального объекта, в переменную $assigned помещается копия объекта, хранящегося в $instance до этого присвоения (передача по значению). Отсюда эти переменные ссылаются на 2 разных экземпляра класса. А переменная же $reference - является лишь ссылкой на $instance (передача по ссылке), поэтому если оригинал затереть - ссылка тоже затрется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы