Где находится объект, когда я назначаю новый объект существующему объекту php? - PullRequest
0 голосов
/ 31 августа 2011

Например:

1 $abc = new MyObj();
2 $abc = new MyAnotherObj();

Я назначаю MyObj в первой строке, а вторая строка назначит другой объект. Куда идет объект, назначенный в первой строке? Это все еще в памяти или где-то еще?

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Как только вторая строка будет выполнена, первый объект будет вызывать свой деструктор и будет освобожден.PHP GC делает подсчет ссылок;когда вы перезаписываете единственную ссылку на экземпляр MyObj, количество ссылок падает до нуля, и ГХ уничтожает объект.

Обратите внимание, что это произойдет независимо от того, что вы присвоили $abc - вымог бы назначить "foobar" или 42 или null или даже new MyObj() ( новый экземпляр MyObj), и старый объект будет уничтожен.

См. этот пример на ideone .

1 голос
/ 31 августа 2011

Это будет сборщик мусора на любом другом языке, так как на него больше нет ссылок (и вы не сможете ссылаться на него дальше).Это одна из тех вещей, которые я бы просто не делал в PHP (или, вообще, на любом другом языке) ... если вам нужна ссылка на этот первый объект, сначала сохраните его или не используйте то же имя переменной.1001 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...