PHP에서 Unset ()는 변수 또는 배열에서 요소를 파괴하는 데 일반적으로 사용되는 기능입니다. Hyperglobal 배열 (예 : $ _post , $ _get , $ _session 등)을 처리하면 이러한 배열에서 특정 변수를 제거해야 할 수도 있습니다. 이 기사에서는 unset ()을 사용하여 고 유적 배열에서 변수를 제거하고 사용할 때 몇 가지 예방 조치를 지적하는 방법을 자세히 설명합니다.
UnSet ()는 하나 이상의 변수를 파괴하는 데 사용됩니다. 배열 요소를 제거 할 때 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 하이퍼 글로벌 배열이 있다고 가정합니다. 특정 키 값 쌍 (예 : 키 이름 사용자 이름이있는 데이터)을 삭제하려면 다음을 수행 할 수 있습니다.
<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 등은 모두 사용자 입력 데이터, 세션 정보 또는 브라우저 관련 변수를 저장하는 데 종종 사용되는 Hyperglobal Array입니다. 때로는 요청을 처리 할 때 요소를 삭제해야 할 수도 있습니다. 몇 가지 일반적인 사용 시나리오는 다음과 같습니다.
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 () 는 브라우저에서 세트 쿠키를 직접 삭제할 수 없지만 만료 된 쿠키를 설정하여 "삭제"할 수 있습니다.
<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 ()는 과도로 배열에서 요소를 삭제할 수 있지만 전체 초 유광 배열을 삭제하지는 않습니다. 예를 들어 다음 코드 :
<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 ()를 올바르게 사용하면 초 유적 데이터를 효과적으로 관리하여 필요한 데이터 만 배열에 남아 있는지 확인할 수 있습니다. 그러나 삭제하거나 논리적 오류를 소개하지 않아야 할 변수를 실수로 수정하지 않기 위해 사용할 때 일부 세부 사항에주의를 기울여야합니다.