PHP에서 설정을 해제하기 전에 var가 있는지 확인하십시오.
PHP에서 변수를 설정 해제 할 때 오류보고를 설정했거나 모범 사례를 위해 먼저 변수가 존재하는지 (이 경우 항상 존재하지는 않음) 확인하고 설정 해제해야합니까, 아니면 설정 해제해야합니까?
<?PHP
if (isset($_SESSION['signup_errors'])){
unset($_SESSION['signup_errors']);
}
// OR
unset($_SESSION['signup_errors']);
?>
설정을 해제하십시오. 존재하지 않으면 아무것도 수행되지 않습니다.
존재하지 않는 변수를 설정 해제 할 때 unset ()이 알림을 트리거하는 원인에 대한이 노트의 앞부분에서 약간의 혼동과 관련하여 ....
존재하지 않는 변수 설정 해제
<?php unset($undefinedVariable); ?>
"정의되지 않은 변수"알림을 트리거하지 않습니다. 그러나
<?php unset($undefinedArray[$undefinedKey]); ?>
이 코드는 배열의 요소를 설정 해제하기위한 것이므로 두 개의 알림을 트리거합니다. $ undefinedArray 또는 $ undefinedKey 자체가 설정 해제되지 않고 설정 해제되어야하는 항목을 찾는 데 사용됩니다. 결국, 그들이 존재했다면, 둘 다 나중에있을 것이라고 기대할 것입니다. 요소 중 하나를 unset ()했다고해서 전체 배열이 사라지는 것을 원하지 않을 것입니다!
unset
정의되지 않은 변수에 사용하면 오류가 발생하지 않습니다 (변수가 존재하지 않는 배열 (또는 객체)의 인덱스가 아닌 경우).
따라서 고려해야 할 유일한 것은 가장 효율적인 것입니다. 내 테스트에서 볼 수 있듯이 'isset'으로 테스트하지 않는 것이 더 효율적입니다.
테스트:
function A()
{
for ($i = 0; $i < 10000000; $i++)
{
$defined = 1;
unset($defined);
}
}
function B()
{
for ($i = 0; $i < 10000000; $i++)
{
$defined = 1;
unset($undefined);
}
}
function C()
{
for ($i = 0; $i < 10000000; $i++)
{
$defined = 1;
if (isset($defined))
unset($defined);
}
}
function D()
{
for ($i = 0; $i < 10000000; $i++)
{
$defined = 1;
if (isset($undefined))
unset($undefined);
}
}
$time_pre = microtime(true);
A();
$time_post = microtime(true);
$exec_time = $time_post - $time_pre;
echo "Function A time = $exec_time ";
$time_pre = microtime(true);
B();
$time_post = microtime(true);
$exec_time = $time_post - $time_pre;
echo "Function B time = $exec_time ";
$time_pre = microtime(true);
C();
$time_post = microtime(true);
$exec_time = $time_post - $time_pre;
echo "Function C time = $exec_time ";
$time_pre = microtime(true);
D();
$time_post = microtime(true);
$exec_time = $time_post - $time_pre;
echo "Function D time = $exec_time";
exit();
결과 :
Function A time = 1.0307259559631
- isset없이 정의 됨
Function B time = 0.72514510154724
- isset없이 정의되지 않음
Function C time = 1.3804969787598
- isset을 사용하여 정의
Function D time = 0.86475610733032
- isset을 사용하여 정의되지 않음
결론:
It is always less efficient to use isset
, not to mention the small amount of extra time it takes to write. It's quicker to attempt to unset
an undefined variable than to check if it can be unset
.
If you would like to unset a variable then you can just use unset
unset($any_variable); // bool, object, int, string etc
Checking for its existence has no benefit when trying to unset a variable.
If the variable is an array and you wish to unset an element you must make sure the parent exists first, this goes for object properties too.
unset($undefined_array['undefined_element_key']); // error - Undefined variable: undefined_array
unset($undefined_object->undefined_prop_name); // error - Undefined variable: undefined_object
This is easily solved by wrapping the unset
in an if(isset($var)){ ... }
block.
if(isset($undefined_array)){
unset($undefined_array['undefined_element_key']);
}
if(isset($undefined_object)){
unset($undefined_object->undefined_prop_name);
}
The reason we only check the variable(parent) is simply because we don't need to check the property/element and doing so would be a lot slower to write and compute as it would add an extra check.
if(isset($array)){
...
}
if(isset($object)){
...
}
.vs
$object->prop_name = null;
$array['element_key'] = null;
// This way elements/properties with the value of `null` can still be unset.
if(isset($array) && array_key_exists('element_key', $array)){
...
}
if(isset($object) && property_exists($object, 'prop_name')){
...
}
// or
// This way elements/properties with `null` values wont be unset.
if(isset($array) && $array['element_key'])){
...
}
if(isset($object) && $object->prop_name)){
...
}
This goes without saying but it is also crucial that you know the type
of the variable when getting, setting and unsetting an element or property; using the wrong syntax will throw an error.
Its the same when trying to unset the value of a multidimensional array or object. You must make sure the parent key/name exists.
if(isset($variable['undefined_key'])){
unset($variable['undefined_key']['another_undefined_key']);
}
if(isset($variable->undefined_prop)){
unset($variable->undefined_prop->another_undefined_prop);
}
When dealing with objects there is another thing to think about, and thats visibility.
Just because it exists doesn't mean you have permission to modify it.
Check this link https://3v4l.org/hPAto
The online tool shows code compatibility for different versions of PHP
According to this tool the code
unset($_SESSION['signup_errors']);
would work for PHP >=5.4.0 without giving you any notices/warnings/errors.
참고URL : https://stackoverflow.com/questions/1374705/check-if-var-exist-before-unsetting-in-php
'developer tip' 카테고리의 다른 글
jQuery .hide ()와 .css ( "display", "none")의 차이점 (0) | 2020.10.12 |
---|---|
HTML ID의 실제 최대 길이는 얼마입니까? (0) | 2020.10.11 |
인터페이스를 사용하는 이유는 무엇입니까? (0) | 2020.10.11 |
함수 매개 변수의 "this" (0) | 2020.10.11 |
객체를 사전에 매핑하거나 그 반대로 매핑 (0) | 2020.10.11 |