Vous cherchez unset()
.
Mais gardez à l'esprit que vous ne pouvez pas détruire explicitement un objet.
Il restera là, cependant si vous désactivez l'objet et que votre script pousse PHP dans les limites de la mémoire, les objets inutiles seront récupérés. J'irais avec unset()
(plutôt que de le définir sur null) car il semble avoir de meilleures performances (non testé mais documenté sur un des commentaires du manuel officiel de PHP).
Cela dit, gardez à l'esprit que PHP détruit toujours les objets dès que la page est servie. Cela ne devrait donc être nécessaire que sur des boucles très longues et / ou des pages très intensives.
new
une fois, alors on doit utiliserdelete
une fois. Ce n'est pas vrai en PHP? Il y a un garbage collection automatique lorsque l'objet n'est plus nécessaire?unset()
Supprime- t-il la référence à l'objet?Un article pratique expliquant plusieurs malentendus à ce sujet:
N'appelez pas explicitement le destructeur
Cela couvre plusieurs idées fausses sur le fonctionnement du destructeur. L'appeler explicitement ne détruira pas réellement votre variable, selon la doc PHP5:
Le message ci-dessus indique que la définition de la variable sur null peut fonctionner dans certains cas, tant que rien d'autre ne pointe vers la mémoire allouée.
la source
Réponse courte: les deux sont nécessaires.
J'ai l'impression que la bonne réponse a été donnée mais de manière minimale. Ouais généralement unset () est le meilleur pour la "vitesse", mais si vous voulez récupérer de la mémoire immédiatement (au prix du processeur), vous devez utiliser null.
Comme d'autres l'ont mentionné, définir sur null ne signifie pas que tout est récupéré, vous pouvez avoir des objets de mémoire partagée (non clonés) qui empêcheront la destruction de l'objet. De plus, comme d'autres l'ont dit, vous ne pouvez pas «détruire» les objets explicitement de toute façon, vous ne devriez donc pas essayer de le faire de toute façon.
Vous devrez déterminer ce qui vous convient le mieux. Vous pouvez également utiliser __destruct () pour un objet qui sera appelé sur unset ou null mais il doit être utilisé avec précaution et comme d'autres l'ont dit, ne jamais être appelé directement!
voir:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/
Quelle est la différence entre l'affectation de NULL et unset?
la source
Ceci est une simple preuve que vous ne pouvez pas détruire un objet, vous ne pouvez détruire qu'un lien vers celui-ci.
Retour
Voyez-le en action ici: https://eval.in/1054130
la source
$var2
ce qui était une référence$var
. Maintenant, vous détruisez$var
également et, en supposant qu'il n'y a pas d'autres références sur l'objet, vous avez terminé.Peut être dans une situation où vous créez un nouvel objet mysqli.
$MyConnection = new mysqli($hn, $un, $pw, $db);
mais même après avoir fermé l'objet
$MyConnection->close();
si vous utilisez
print_r()
pour vérifier le contenu de$MyConnection
, vous obtiendrez une erreur comme ci-dessous:dans ce cas, vous ne pouvez pas utiliser
unlink()
carunlink()
nécessitera une chaîne de nom de chemin, mais dans ce cas, il$MyConnection
s'agit d'un objet.Vous avez donc un autre choix de définir sa valeur sur null:
$MyConnection = null;
maintenant les choses vont bien, comme vous vous y attendiez. Vous n'avez aucun contenu dans la variable
$MyConnection
et vous avez déjà nettoyé l'objet mysqli.Il est recommandé de fermer l'objet avant de définir la valeur de votre variable sur
null
.la source
J'irais avec unset car cela pourrait donner au ramasse-miettes un meilleur indice afin que la mémoire puisse être à nouveau disponible plus tôt. Veillez à ce que toutes les choses vers lesquelles l'objet pointe soit aient d'autres références ou soient annulées en premier, sinon vous devrez vraiment attendre le ramasse-miettes car il n'y aurait alors aucun descripteur.
la source