О магическом методе __destruct () и когда он вызывается - PullRequest
0 голосов
/ 21 января 2012

У меня есть класс, который хранит массив и сохраняет его содержимое в событии __destruct().__destruct() вызывается автоматически, когда нет другой ссылки на объект как «целое» или относительно текущего класса или сценария, который его использует?Пример:

class Store
{
  public function set($key, $value) { $this->data[$key] = $value; }
  public function __destruct() { fwrite($this->handle, serialize($this->data)); }
}

class Consumer
{
   protected $store;
   public function __construct() { $this->store = new Store(); }
   public function __destruct() { $this->store->set('key', 'a'); }
}

// In external script...
$store = new Store();
$store->set('key', 'b');
new Consumer();

Когда в этом примере вызывается __destruct()?Дважды?Один?Какое значение ключ ?

1 Ответ

1 голос
/ 21 января 2012

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

Потребитель будет вызван первым, поскольку он не имеет ссылки.Затем хранилище при выходе из сценария:

  • new Store () => Конструкция магазина
  • new Consumer () => Конструкция Consumer => Конструкция Store
  • (неявное удаление Consumer) => Consumer destruct => Store destruct
  • выход из скрипта => Store destruct

Это для каждого объекта.Каждый созданный / уничтоженный объект будет иметь вызываемые методы конструирования / разрушения.

...