2011-04-08 6 views
5

escribí una pequeña clase para almacenar variables/funciones globales. mi pregunta es: ¿es necesario destruir el objeto de clase una vez que el script ha finalizado? o php destruirá ese objeto en sí?php pregunta para novatos: ¿destruir objeto de clase?

aquí es mi código:

$web=new c_web("myWeb"); 
$web->loadTemplate("/!framework/admin/template.htm"); 
$web->doStuff(); 
// script has finished - destroying required here? 

en caso de que necesite para destruirlo - ¿cómo? thx de antemano

Respuesta

8

Si el script finaliza, la memoria se libera. Usted está listo como es :)

+0

genial - gracias! y ¿qué pasa si un script terminará por un error? ¿se destruirán también todas las variables (base de datos ...)? – Fuxi

+0

Bueno, la conexión de la base de datos puede necesitar un "cierre", pero en la mayoría de las situaciones solo tiene que preocuparse por esto cuando necesite más memoria DURANTE la ejecución. Entonces, si carga X cantidad de datos en un objeto, y luego desea hacerlo de nuevo. Pero básicamente: no te preocupes, código feliz :) – Nanne

3

No, no es necesario para destruir cualquier variable mismo (y un objeto es una variable): tan pronto como su script PHP llega a su fin, serán liberados sus variables, y la memoria correspondiente liberada.

En realidad, una variable se destruye automáticamente cuando se alcanza el final de su variable's scope y, cuando llega al final del script, es el final del alcance introducido por la ejecución de ese script.


(Contestación de un comentario a otra respuesta)
Por supuesto, cuando la secuencia de comandos se terminó debido a un error, lo mismo que sucede: las variables son liberados, y liberados de la memoria.

+0

¿qué hay de las conexiones de bases de datos abiertas? ¿Debo cerrarlos? – Fuxi

+0

A menos que esté utilizando conexiones persistentes, las conexiones se terminan automáticamente cuando termina el script PHP. –

4

Como dijo @Nanne, si la secuencia de comandos finaliza la memoria se libera, sin embargo, en algunas circunstancias es posible que desee unset($web);.