PHPでは、 unset()は、変数または配列の要素を破壊するために一般的に使用される関数です。ハイパーグローバルアレイ( $ _POST 、 $ _GET 、 $ _SESSIONなど)を処理する場合、これらの配列から特定の変数を削除する必要がある場合があります。この記事では、Unset()を使用してHyperglobal Arrayから変数を削除する方法を詳細に説明し、それらを使用する際の予防策を指摘します。
unset()は、1つ以上の変数を破壊するために使用されます。配列要素を削除するときは、 unset()を直接使用して配列のキーを指定して削除できます。基本的な構文は次のとおりです。
<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>たとえば、ユーザーが送信したフォームデータを含む$ _POST HyperGlobalアレイがあるとします。特定のキー値ペア(たとえば、キー名のユーザー名のデータなど)を削除する場合、これを行うことができます。
<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>PHPでは、 $ _get 、 $ _Post 、 $ _Session 、 $ _Cookieなどはすべてハイパーグローバルアレイであり、ユーザーの入力データ、セッション情報、またはブラウザ関連の変数を保存するためによく使用されます。リクエストを処理するときに要素を削除する必要がある場合があります。一般的な使用シナリオは次のとおりです。
URL内のクエリ文字列に不要なパラメーターが含まれている場合、 unset()で削除できます。例えば:
<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>これにより、 $ _getからIDパラメーターが削除されます。
セッション管理は通常、 $ _Sessionアレイを介してユーザーログインステータスやその他の情報を保存します。ユーザーがログアウトすると、特定のセッション変数を削除できます。
<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>セッション全体を削除する場合は、 session_destroy()を使用できます。
unset()はブラウザからSet Cookieを直接削除することはできませんが、期限切れのCookieを設定して「削除」できます。
<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">// 設定 cookie 有効期限は1時間前です</span></span><span>
</span></span>このようにして、ユーザーのブラウザはユーザー名クッキーを削除します。
unset()は非常に強力なツールですが、使用する際に注意を払う詳細がいくつかあります。
Unset()は、Hyperglobal Arrayで要素を削除できますが、Hyperglobalアレイ全体を削除しません。たとえば、次のコード:
<span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$_POST</span></span><span>);
</span></span>$ _POSTアレイ全体を削除するのではなく、 $ _POSTアレイへの参照を単純に破壊します。 $ _POSTアレイ自体は引き続き存在し、その中の要素にアクセスできます。
$ _GLOBALSアレイは、グローバルスコープの変数にアクセスして変更するために使用されます。 $ _GLOBALSはPHPの内部実装の一部であるため、 UNSET()は$ _GLOBALSから要素を削除できません。これは、 $ _globalsアレイがPHPランタイムのグローバル環境に密接に結合しているためです。
変数が参照に渡される場合、 unset()を使用して配列要素が削除された場合、参照は直接影響を受けません。例えば:
<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">// 削除されました $a 変数</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">// まだ出力 10,なぜなら $b まだ引用されています $a</span></span><span>
</span></span>unset()を使用して、 foreachループ内の配列要素を削除する場合は注意してください。 foreachは現在の配列要素のコピーを作成するため、 foreachループの配列要素を直接削除すると、予想される効果が生成されない場合があります。例えば:
<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>unset()は$ _post ['username']を削除しますが、 foreachがループ中に配列のコピーを作成したため、 $ _postアレイはループが終了した後も同じままです。そのような問題を回避するために、最初にアレイに削除する要素を収集し、次にループの外側で削除するか、 array_filter()を使用してフィルタリングすることを検討できます。
PHPでは、 unset()は、ハイパーグローバルアレイから変数を簡単に削除する簡単な方法です。 Unset()を正しく使用することにより、Hyperglobalデータのみを効果的に管理し、必要なデータのみが配列に残っていることを確認できます。ただし、誤って削除したり、論理エラーを導入してはならない変数を誤って変更しないように使用する場合は、詳細にも注意を払う必要があります。