2010-07-24 13 views

risposta

10

PHP 5 introduce un concetto distruttore simile a quella di altre linguaggi orientati agli oggetti, come C++. Il metodo distruttore sarà chiamato non appena tutti i riferimenti a un oggetto specifico vengono rimossi o quando l'oggetto viene eliminato in modo esplicito o in qualsiasi ordine nella sequenza di arresto.

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

+2

Infatti, come tutti i riferimenti sono andati, non necessariamente se una variabile esce dall'ambito. – Wrikken

+1

questo include anche quando lo script stesso termina l'esecuzione. –

+0

Ma come posso chiamare i distruttori nel caso in cui lo script non venga completato in modo pulito? In Windows, per un esempio, quando si uccide un processo, tutte le risorse conteggiate di nuovo vengono automaticamente decrementate sullo stesso conteggio incrementato prima dell'incidente. Ho bisogno di inviare un pacchetto per la pulizia della sessione su un altro server anche in caso di eccezione. –

4

Si chiama quando la prima di queste condizioni sono soddisfatte:

  • Il conteggio di riferimento dell'oggetto va a 0 (questi di solito accade quando l'oggetto non ha più variabili che fanno riferimento esso - erano disinseriti o usciti dall'ambito -, ma può succedere più tardi, poiché un oggetto può essere referenziato da qualcosa di diverso da una variabile - infatti, il conteggio dei riferimenti è solo un numero e può essere manipolato in un modo arbitrario).
  • Quando si utilizza PHP 5.3, quando il garbage collector rileva che il conteggio dei riferimenti positivi è dovuto a riferimenti circolari.
  • Altrimenti, quando lo script termina in modo pulito.

In breve, non si deve fare affidamento sul fatto che venga sempre chiamato, perché lo script potrebbe non terminare in modo pulito.

Problemi correlati