Cómo destruir un objeto?

Hasta donde yo sé (que es muy poco), hay dos formas, dado:

$var = new object() 

Entonces:

 // Method 1: Set to null $var = null; // Method 2: Unset unset($var); 

Otro mejor método? ¿Estoy dividiendo pelos aquí?

Está buscando unset() .

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

Permanecerá allí, sin embargo, si desarma el objeto y su secuencia de comandos empuja a PHP a los límites de memoria, los objetos que no necesite serán basura. Me gustaría ir con unset() (en lugar de establecerlo en nulo) ya que parece tener un mejor rendimiento (no probado, pero documentado en uno de los comentarios 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.

Una publicación útil que explica varios malentendidos sobre esto:

No llame a The Destructor explícitamente

Esto cubre varios conceptos erróneos sobre cómo funciona el destructor. Llamarlo explícitamente no destruirá realmente su variable, de acuerdo con el documento PHP5:

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

La publicación anterior indica que establecer la variable en nulo puede funcionar en algunos casos, siempre que nada más esté apuntando a la memoria asignada.

Respuesta corta: ambos son necesarios.

Siento que se dio la respuesta correcta, pero mínimamente. Sí, generalmente unset () es mejor para “velocidad”, pero si quieres recuperar memoria inmediatamente (a costa de la CPU) deberías usar null.

Como otros mencionados, establecer en nulo no significa que todo se recupera, puede haber compartido objetos de memoria (no clonados) que evitarán la destrucción del objeto. Además, como han dicho otros, no se puede “destruir” explícitamente los objetos, así que no intentes hacerlo de todos modos.

Tendrá que descubrir cuál es la mejor opción para usted. También puedes usar __destruct () para un objeto que se invocará en unset o null, pero se debe usar con cuidado y, como otros dijeron, ¡nunca se te llame directamente!

ver:

http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/

¿Cuál es la diferencia entre asignar NULL y unset?

Esta es una prueba simple de que no puedes destruir un objeto, solo puedes destruir un enlace.

 $var = (object)['a'=>1]; $var2 = $var; $var2->a = 2; unset($var2); echo $var->a; 

devoluciones

2

Véalo en acción aquí: https://eval.in/1054130

Me gustaría ir con unset porque podría darle al recolector de basura una mejor pista para que la memoria esté 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.