la différence entre unset et = null
À partir d'un aléatoire php.net post:
Si vous faites $quel que soit = null; alors vous êtes à la réécriture de la variable
les données. Vous pourriez obtenir mémoire libérée /diminué plus rapidement, mais il peut voler CPU
cycles du code qui a vraiment besoin d'eux plus tôt, entraînant une
plus le temps d'exécution global.
Apparemment, c'est le incontesté de la vérité alors peut-être que quelqu'un serait donc de nature à expliquer.
Je veux dire, ce qui, ne unset
comme par magie exécute pas les instructions d'assemblage alors que $whatever = null;
n'? La réponse, donnée, est à peu près aussi utile que de dire
$quel que soit = null réinitialise la mémoire tampon et le cache L1 alors que unset efface la mémoire tampon et réinitialise le cache L2.
Techno mumbo jumbo ne constitue pas une réponse.
- Je pense qu'il pourrait être lié à des variables les valeurs en PHP (oui, j'ai dit que: en interne, les variables sont des objets). Alors il pourrait y avoir une différence entre "réglage de la valeur d'une variable (null)" et "la suppression d'une variable" en termes de nettoyage .. mais c'est juste une spéculation sauvage de ma part 😉
- Vous rend de façon compliquée qu'elle ne l'est. L'affectation d'un var null signifie que la variable est définie avec une valeur null. Unset rend le var non existant.
- il pourrait être la réponse ,..avec un peu plus d'explication
- double possible de What mieux libérer de la mémoire avec PHP: unset() ou $var = null
Vous devez vous connecter pour publier un commentaire.
Une différence importante entre les deux méthodes est que
unset($a)
supprime également$a
à partir de la table des symboles; par exemple:Sorties:
Mais quand
$a = null
est utilisé:Sorties:
J'ai couru le code par le biais d'un indice de référence ainsi et a constaté que
$a = null
est d'environ 6% plus rapide que sonunset()
homologue. Il semble que la mise à jour de la table des symboles d'entrée est plus rapide que de le retirer.Additif
L'autre différence (comme on le voit dans ce petit script) semble être la quantité de mémoire est restituée après chaque appel:
Lors de l'utilisation de
unset()
tous, mais 64 octets de mémoire sont rendus, alors que$a = null;
libère de tous, mais 272 octets de mémoire. Je n'ai pas assez de connaissances pour savoir pourquoi il y a une 208 octets différence entre les deux méthodes, mais c'est une différence tout de même.unset()
peut être plus rapide que= null
et libérer plus de mémoire.Lors de l'utilisation de la fonction unset, l'utilisation de la mémoire et de temps de traitement est de moins en moins.
http://php.net/manual/en/function.unset.php#105980
J'ai fait un test simple.
Considérant une classe simple comme ceci:
J'exécute ce code code
Et ce
Pour ce que vaut, il semble que le
null
méthode de courir plus vite.$cat = new Cat;
PHP déchets-collecte, le vieux chat et récupérer de la mémoire, quelle que soit unset/null. C'est donc seulement vous montrer l'utilisation de la mémoire diff du dernier Chat de l'instanciation.Les réponses ci-dessus sont super, surtout le commentaire que "Une différence importante entre les deux méthodes est que la fonction unset($a) supprime également $a partir de la table des symboles".
Cependant, je ne pense pas que quelqu'un a vraiment bien répondu à la question dans un sens pratique, car ils ne décrivent pas comment les deux sont utilisés. OK je pense que nous savons qu'ils sont à la fois fondamentalement faire la même chose. Pourquoi utiliser l'un plutôt que l'autre?
null
Libère de la mémoire immédiate (au détriment de prendre plus de temps) malgré PHP auto-gestion de la mémoire /la collecte des ordures.
unset()
Est généralement recommandé, car il libère de la mémoire "quand j'arrive à obtenir" et est donc considéré comme plus rapide car elle ne permet pas de consacrer des ressources immédiatement à elle.
Quand faut utiliser la valeur null vs unset?
De base (de données) les données des tableaux etc. sont de bons candidats pour unset parce que la mémoire ne deviendra pas un problème. Grands ensembles de données et/ou n'importe où la nécessité de récupérer de la mémoire immédiate est mieux pour null. Par exemple, la grande base de données de demande peut cannibaliser votre mémoire de PHP plafond très rapidement si elle est appelée plusieurs fois dans une fonction, etc. ce qui va provoquer la page 500 erreurs de la mémoire est pleine, etc.. par conséquent, unset doit être privilégiée lorsque la vitesse est importante (en général) et quand il y est de peu d'intérêt pour la mémoire de construire.
Exemple: Prenez un grand tableau et de le placer dans MemCache:
La boucle for est de nettoyer les données, la valeur null ou unset pourrait être utilisé, mais depuis, c'est un grand jeu de données, peut-être null est préféré car il va récupérer la mémoire plus rapide.
À l'aide du code
pour 10 fois:
Ressemble à nulle cession a moins de temps de traitement le plus souvent.