137 votes

Le meilleur moyen de détruire un objet PHP?

Autant que je sache (ce qui est très peu), il y a deux façons, étant donné:

 $var = new object()
 

Ensuite:

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

Autre meilleure méthode? Est-ce que je coupe les cheveux ici?

À votre santé!

171voto

Frankie Points 12557

Vous êtes à la recherche pour unset().

Mais prendre en compte que vous ne pouvez pas explicitement détruire un objet.

Il va y rester, cependant, si vous enlevez l'objet et votre script pousse PHP pour les limites de la mémoire les objets qui ne sont pas nécessaires, il y aura des ordures collectées. Je voudrais aller avec unset() (plutôt que de la mettre à null), car il coutures de meilleures performances (pas encore testé mais documenté sur l'un des commentaires de la PHP manuel officiel).

Cela dit, ne gardez à l'esprit que PHP toujours détruit les objets dès que la page est servi. Donc, cela ne devrait être nécessaire sur de très longues boucles et/ou lourds intensive pages.

9voto

sturrockad Points 638

Une pratique post expliquant plusieurs mis-compréhension à ce sujet:

Ne pas Appeler Le Destructeur explicite

Ce couvre plusieurs idées fausses sur la façon dont le destructeur de travaux. L'appelant explicitement ne sera pas réellement détruire votre variable en fonction de l'PHP5 doc:

PHP 5 introduit un destructeur concept similaire à celle des autres les langages orientés objet (C++. Le destructeur de la méthode dès qu'il n'y a pas d'autres références à un particulier objet, ou dans n'importe quel ordre au cours de la séquence d'arrêt.

Le post ci-dessus ne fait état que la définition de la variable à null peut fonctionner dans certains cas, tant que rien d'autre n'est pointant vers la mémoire allouée.

1voto

Ben Rowe Points 15269

ils détruisent tous les deux l'objet, mais l'effet suivant est que $var est défini ou non défini. Sauf si vous avez besoin de $var à une autre fin, il serait préférable d’utiliser unset($var)

-9voto

hackartist Points 3193

J’irais avec unset parce qu’il pourrait donner le garbage collector un soupçon mieux afin que la mémoire peut être disponible au plus tôt. Veillez à ce que toutes les choses les points de l’objet ont d’autres références ou obtenir première désactivé ou vous vraiment devront attendre sur le garbage collector puisqu’il serait alors sans poignées pour eux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X