Иногда это просто для мема чистоты.Но в вашем примере оба $observer
и ->$db_build
ссылаются на подобъекты.Таким образом, здесь есть намерение уничтожить их до уничтожения текущего объекта.(Хотя я не уверен, что ядру Zend действительно нравится, когда его прерывают, когда он находится в разрушительном буйстве. Возможно, у него есть список спула или что-то в этом роде.)Но это может быть разумно, если составные подобъекты имеют некоторые зависимости;например, счетчики или сами ссылки в реестре.Итак, в большинстве случаев не нужно, я бы сказал.
Я сделал глупый пример, демонстрирующий порядок __destruct:
class dest {
function __construct($name, $sub=NULL) {
$this->name = $name;
$this->sub = $sub;
}
function __destruct() {
print "<destroying $this->name>\n";
$this->sub = NULL;
print "</destroying $this->name>\n";
}
}
$d = new dest("first", new dest("second", new dest("third")));
exit;
Без $this->sub = NULL
уничтожения объектовкаждый бы происходил индивидуально, не обязательно в порядке создания экземпляров.При ручном сбрасывании составных объектов, однако, PHP уничтожает три объекта вложенным способом:
<destroying first>
<destroying second>
<destroying third>
</destroying third>
</destroying second>
</destroying first>