Unset () est une fonction intégrée en PHP qui détruit une variable. Après avoir utilisé unset () , la variable n'est plus disponible et les ressources de mémoire occupées seront publiées. Surtout lorsque vous traitez de grandes quantités de données ou de structures de données complexes, l'utilisation rationnelle de Unset () peut efficacement aider à réduire l'utilisation de la mémoire et à éviter les fuites de mémoire.
<span><span><span class="hljs-variable">$var</span></span><span> = </span><span><span class="hljs-string">'Hello, world!'</span></span><span>;
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$var</span></span><span>);
</span></span>Dans l'exemple ci-dessus, la variable $ var est détruite après l'appel unset () , et $ var n'est plus accessible.
PHP est une langue basée sur le mécanisme de collecte des ordures. En théorie, le mécanisme de collecte des ordures de PHP nettoie régulièrement la mémoire non pas. Lorsque vous utilisez unset () , la variable devient indisponible immédiatement, libérant la mémoire qu'il occupe. Pour les objets plus petits et les variables simples, les frais généraux de performance de cette opération sont généralement faibles et ne provoquent pas de dégradation significative des performances.
Cependant, pour les structures de données complexes telles que les grandes tableaux ou objets, unset () peut avoir des coûts de performance élevés. En effet, PHP traverse les éléments de la structure des données et supprime les références liées, en particulier lorsqu'il existe des dénombrements élevés de références de tableau ou d'objets, ce qui peut entraîner des pertes de performances supplémentaires.
PHP utilise le comptage de référence pour gérer la mémoire. Lorsqu'une variable est référencée plusieurs fois, PHP augmente le nombre de références. La variable n'est détruite que lorsque le nombre de références est nul. Unset () réduit simplement le nombre de références de la variable, et si des références existent toujours ailleurs, la mémoire ne sera pas recyclée immédiatement. Par conséquent, l'utilisation de Unset () ne fait pas toujours de mémoire libre immédiatement, surtout lorsque le nombre de références est élevé.
<span><span><span class="hljs-variable">$a</span></span><span> = &</span><span><span class="hljs-variable">$b</span></span><span>;
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>); </span><span><span class="hljs-comment">// $b Le nombre de références ne sera pas nul</span></span><span>
</span></span>Dans le code ci-dessus, bien que $ A soit détruit, car $ B fait toujours référence au même emplacement de mémoire, la mémoire n'est pas immédiatement recyclée.
Bien que Unset () soit un outil de gestion de la mémoire fournis par PHP, un appel fréquent à unset () peut apporter des frais généraux de performances inutiles, en particulier lors des opérations de données en boucle et à grande échelle. Si unset () est appelé plusieurs fois dans une boucle, il obligera PHP à vérifier fréquemment les références de variables en mémoire, ce qui affectera l'efficacité de l'exécution.
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$largeArray</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$largeArray</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>]); </span><span><span class="hljs-comment">// Appelez fréquemment en boucle unset()</span></span><span>
}
</span></span>Le code ci-dessus peut entraîner une dégradation des performances, en particulier lorsqu'il s'agit de grandes tableaux, car PHP doit constamment ajuster la structure du tableau et la gestion de la mémoire.