2010-07-24 8 views

Respuesta

10

PHP 5 introduce un concepto destructor similar a la de otros lenguajes orientados a objetos, tales como C++. El método destructor será llamado tan pronto como se eliminen todas las referencias a un objeto particular o cuando el objeto se destruya explícitamente o en cualquier orden en la secuencia de apagado.

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

+2

De hecho, como todas las referencias se han ido, no necesariamente si una variable está fuera de ámbito. – Wrikken

+1

esto también incluye cuando el script mismo termina de ejecutarse. –

+0

Pero, ¿cómo puedo llamar a los destructores en caso de que el script no termine limpiamente? En Windows, por ejemplo, al matar un proceso, todos los recursos contados como referencia se disminuyen automáticamente en el mismo conteo que se incrementaron antes del bloqueo. Necesito enviar un paquete para la limpieza de la sesión a otro servidor en caso de excepción también. –

4

Se llama cuando se cumple la primera de estas condiciones:

  • El recuento de referencia del objeto va a 0 (esto suele ocurrir cuando el objeto no tiene más variables que hacen referencia a que - estaban definido o se fue fuera de alcance -, pero puede ocurrir más tarde, como un objeto puede ser referenciado por algo que no sea una variable - de hecho, la cuenta de referencia es sólo un número y puede ser manipulado en una forma arbitraria).
  • Cuando se usa PHP 5.3, cuando el recolector de basura detecta el número de referencia positiva se debe a las referencias circulares.
  • De lo contrario, cuando el guión termina limpiamente.

En resumen, no debe confiar en que siempre se invoca, porque es posible que el script no termine de forma limpia.