Dans PHP, Unset () est une fonction couramment utilisée pour détruire les éléments dans des variables ou des tableaux. Lorsque nous traitons des tableaux hyperglobaux (tels que $ _post , $ _get , $ _session , etc.), nous devrons peut-être supprimer une variable spécifique de ces tableaux. Cet article expliquera en détail comment utiliser unset () pour supprimer les variables des tableaux hyperglobaux et souligner certaines précautions lors de leur utilisation.
Unset () est utilisé pour détruire une ou plusieurs variables. Lors de la suppression des éléments du tableau, vous pouvez utiliser directement unset () pour spécifier la clé du tableau et le supprimer. La syntaxe de base est la suivante:
<span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>]);
</span></span>Par exemple, supposons que nous ayons un tableau hyperglobal $ _post contenant les données de formulaire soumises par l'utilisateur, si nous souhaitons supprimer une paire de valeurs de clé spécifique (par exemple, les données avec le nom d'utilisateur du nom de clé), nous pouvons le faire:
<span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>]);
</span></span>En php, $ _get , $ _post , $ _Session , $ _cookie , etc. sont tous des tableaux hyperglobaux, qui sont souvent utilisés pour stocker les données d'entrée des utilisateurs, les informations de session ou les variables liées au navigateur. Parfois, nous pouvons devoir supprimer un élément lors du traitement d'une demande. Voici quelques scénarios d'utilisation courants:
Lorsque la chaîne de requête dans l'URL contient des paramètres inutiles, il peut être supprimé via unset () . Par exemple:
<span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>]);
</span></span>Cela supprimera le paramètre ID de $ _get .
La gestion de session stocke généralement l'état de connexion des utilisateurs et d'autres informations via le tableau $ _Session . Si l'utilisateur se déconnecte, nous pouvons supprimer des variables de session spécifiques:
<span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>]);
</span></span>Si vous souhaitez supprimer toute la session, vous pouvez utiliser session_destroy () .
Bien que Unset () ne peut pas supprimer les cookies directement du navigateur, vous pouvez le "supprimer" en définissant un cookie expiré:
<span><span><span class="hljs-title function_ invoke__">setcookie</span></span><span>(</span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-title function_ invoke__">time</span></span><span>() - </span><span><span class="hljs-number">3600</span></span><span>); </span><span><span class="hljs-comment">// installation cookie Le temps d'expiration est il y a une heure</span></span><span>
</span></span>De cette façon, le navigateur de l'utilisateur supprimera le cookie du nom d'utilisateur .
Bien que Unset () soit un outil très puissant, il y a quelques détails auxquels faire attention lors de son utilisation:
Unset () peut supprimer un élément dans un tableau hyperglobal, mais il ne supprime pas l'intégralité du réseau hyperglobal. Par exemple, le code suivant:
<span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$_POST</span></span><span>);
</span></span>Il ne supprime pas l'ensemble du tableau $ _POST , il détruit simplement la référence au tableau $ _POST . Le tableau $ _POST lui-même existe toujours et peut toujours accéder aux éléments à l'intérieur.
Le tableau $ _globals est utilisé pour accéder et modifier les variables dans la portée globale. Puisque $ _globals fait partie de la mise en œuvre interne de PHP, unset () ne peut pas supprimer les éléments de $ _globals . En effet
Si une variable est transmise par une référence, la référence ne sera pas directement affectée lorsque l'élément de tableau est supprimé à l'aide de Unset () . Par exemple:
<span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-number">10</span></span><span>;
</span><span><span class="hljs-variable">$b</span></span><span> = &</span><span><span class="hljs-variable">$a</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">// Supprimé $a variable</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$b</span></span><span>; </span><span><span class="hljs-comment">// Sortie toujours 10,parce que $b Toujours cité $a</span></span><span>
</span></span>Soyez prudent lorsque vous utilisez unset () pour supprimer les éléments du tableau dans une boucle foreach . ForEach créera une copie de l'élément de tableau actuel, donc la suppression directe de l'élément de tableau dans la boucle Foreach peut ne pas produire l'effet attendu. Par exemple:
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$_POST</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">if</span></span><span> (</span><span><span class="hljs-variable">$key</span></span><span> == </span><span><span class="hljs-string">'username'</span></span><span>) {
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>]);
}
}
</span></span>Bien que Unset () supprime $ _post ['username'] , car Foreach a créé une copie du tableau pendant la boucle, le tableau $ _POST reste le même après la fin de la boucle. Pour éviter de tels problèmes, vous pouvez envisager d'abord de collecter les éléments que vous souhaitez supprimer dans un tableau, puis de les supprimer à l'extérieur de la boucle ou de les filtrer à l'aide d'Array_Filter () .
Dans PHP, unset () est un moyen facile de supprimer les variables d'un réseau hyperglobal. En utilisant correctement unset () , vous pouvez gérer efficacement les données hyperglobales, en vous garantissant que seules les données nécessaires restent dans le tableau. Cependant, vous devez également prêter attention à certains détails lorsque vous l'utilisez pour éviter de modifier accidentellement des variables qui ne doivent pas être supprimées ou introduire des erreurs logiques.