2012-01-10 15 views

Respuesta

113

Está buscando unset().

Pero tenga en cuenta que no se puede destruir explícitamente un objeto.

Se mantendrá allí, sin embargo, si desarma el objeto y su secuencia de comandos empuja a PHP a los límites de memoria, los objetos no necesarios se recogerán. Me gustaría ir con unset() (en lugar de establecerlo en nulo) ya que parece tener un mejor rendimiento (no probado pero documentado en one of the comments del manual oficial de PHP).

Dicho esto, tenga en cuenta que PHP siempre destruye los objetos tan pronto como se sirve la página. Por lo tanto, esto solo debería ser necesario en bucles realmente largos o páginas intensivas pesadas.

+1

Así que Frankie, vengo de C++, donde cuando usamos 'new' una vez, entonces ** debemos ** usar' delete' una vez. Esto no es cierto en PHP? ¿Hay recolección de basura automática cuando el objeto ya no es necesario? – gsamaras

+2

@gsamaras eso es verdad. También puedes tener pérdidas, y deberías leer más en php's GC si estás haciendo daemons o similar. En la mayoría de los sitios, la solicitud es de tan corta duración que no importa. http://php.net/manual/en/features.gc.refcounting-basics.php – Frankie

+0

¿'unset()' elimina la referencia al objeto? –

-8

Me gustaría ir con unset porque podría darle al recolector de basura una mejor pista para que la memoria pueda estar disponible antes. Tenga cuidado de que cualquier cosa que el objeto señale tenga otras referencias o se desarme primero o realmente tendrá que esperar en el recolector de basura ya que no habría ningún identificador para ellos.

+4

¿Una mejor pista ...? – BoltClock

+11

A menos que tenga fuentes para respaldar sus respuestas, probablemente no deba publicar lo que cree que "podría" suceder. No es útil y lleva a que este tipo de desinformación se tome como verdad y se repita. – meagar

+1

@meagar esa es la razón exacta por la que me vinculé a la página del manual oficial donde, en los comentarios, hay una prueba de muestra que compara unset() a null. – Frankie

7

Un post muy útil para explicar varias interpretaciones erróneas acerca de esto:

Don't Call The Destructor explicitly

Esto abarca varios conceptos erróneos acerca de cómo funciona el destructor. Llamándolo de forma explícita en realidad no destruir la variable, de acuerdo con el documento PHP5:

PHP 5 introduce un concepto destructor similar a la de otros lenguajes orientados a objetos, como C++. El método destructor será llamado tan pronto como no haya otras referencias a un objeto en particular, o en cualquier orden durante la secuencia de apagado.

El puesto anterior estado que establecer la variable a NULL puede funcionar en algunos casos, siempre y cuando nada más se apunta a la memoria asignada.

Cuestiones relacionadas