Причём тут вообще сборщик мусора? Функция
unset()
помечает переменную как более неиспользуемую, что влечёт вызов деструктора объекта.
Следующий код ведёт себя в точности так как и преполагается:
<?php
class Foo {
function __construct() {
print("Object created\n");
}
function __destruct() {
print("Object destroyed\n");
}
}
$foo = new Foo();
print("Before unset()\n");
unset($foo);
print("After unset()\n");
Object created
Before unset()
Object destroyed
After unset()
https://ideone.com/Geaqs4
Если убрать
unset()
деструктор будет вызван при выходе переменной из области видимости (т.е. в данном примере - при завершении работы скрипта).