Предсказуем ли деструктор в PHP? - PullRequest
7 голосов
/ 24 июля 2010

Предсказуем ли деструктор класса в PHP? Когда деструктор называется?

Как и во многих языках, будет ли вызываться деструктор класса, как только объект выходит из области видимости?

Ответы [ 2 ]

10 голосов
/ 24 июля 2010

PHP 5 вводит концепцию деструктора похожи на другие объектно-ориентированные языки, такие как C ++. Метод деструктора будет называется, как только все ссылки на конкретный объект удаляется или когда объект явно уничтожен или в любом порядке в последовательности выключения.

http://php.net/manual/en/language.oop5.decon.php

4 голосов
/ 25 июля 2010

Он вызывается при выполнении первого из следующих условий:

  • Счетчик ссылок объекта обнуляется (это обычно происходит, когда у объекта больше нет переменных, ссылающихся на него - они были не установлены или вышли из области видимости), но это может произойти позже, так как объект может быть ссылка на что-то отличное от переменной - на самом деле счетчик ссылок - это просто число, которым можно манипулировать произвольным образом).
  • При использовании PHP 5.3, когда сборщик мусора обнаруживает положительный счетчик ссылок из-за циклических ссылок.
  • В противном случае, когда скрипт завершится чисто.

Короче говоря, вы не должны полагаться на то, что он всегда вызывается, потому что скрипт может не завершиться чисто.

...