Il a été mentionné dans le Page du manuel désactivée en 2009 :
unset()
fait ce que son nom indique - annuler une variable. Il ne force pas la libération immédiate de la mémoire. Le ramasseur de déchets de PHP le fera quand il le jugera bon - par intention dès que possible, car ces cycles CPU ne sont pas nécessaires de toute façon, ou aussi tard qu'avant que le script ne manque de mémoire, selon ce qui se produit en premier.
Si vous faites $whatever = null;
alors vous réécrivez les données de la variable. La mémoire sera peut-être libérée/réduite plus rapidement, mais vous risquez de voler des cycles CPU au code qui en a vraiment besoin plus tôt, ce qui se traduira par un temps d'exécution global plus long.
(Depuis 2013, ce unset
page de manuel n'incluent plus cette section)
Notez que jusqu'à php5.3, si vous avez deux objets en référence circulaire Comme dans le cas d'une relation parent-enfant, l'appel à unset() sur l'objet parent ne libérera pas la mémoire utilisée pour la référence parentale dans l'objet enfant. (La mémoire ne sera pas non plus libérée lorsque l'objet parent sera mis au rebut). bug 33595 )
La question " différence entre unset et = null " détaille quelques différences :
unset($a)
supprime également $a
de la table des symboles ; par exemple :
$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);
Sorties :
Notice: Undefined variable: a in xxx
NULL
Mais quand $a = null
est utilisé :
$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Sorties :
NULL
Il semble que $a = null
est un peu plus rapide que son unset()
contrepartie : la mise à jour d'une entrée de la table des symboles semble être plus rapide que sa suppression.
- lorsque vous essayez d'utiliser un fichier inexistant (
unset
), une erreur sera déclenchée et la valeur de l'expression de la variable sera nulle. (Parce que, qu'est-ce que PHP devrait faire d'autre ? Chaque expression doit donner lieu à une valeur).
- Une variable à laquelle on a assigné la valeur null reste cependant une variable parfaitement normale.