Если вы хотите отключить переменную, вы можете просто использовать unset
unset($any_variable);
Проверка на его существование не имеет смысла при попытке сбросить значение переменной.
Если переменная является массивом, и вы хотите отключить элемент, вы должны сначала убедиться, что родительский элемент существует, это касается и свойств объекта.
unset($undefined_array['undefined_element_key']);
unset($undefined_object->undefined_prop_name);
Это легко решить, если поместить unsetв if(isset($var)){ ... }блок.
if(isset($undefined_array)){
unset($undefined_array['undefined_element_key']);
}
if(isset($undefined_object)){
unset($undefined_object->undefined_prop_name);
}
Причина, по которой мы проверяем только переменную ( родительскую ), заключается просто в том, что нам не нужно проверять свойство / элемент, и это будет намного медленнее для записи и вычислений, поскольку это добавит дополнительную проверку.
if(isset($array)){
...
}
if(isset($object)){
...
}
.vs
$object->prop_name = null;
$array['element_key'] = null;
if(isset($array) && array_key_exists('element_key', $array)){
...
}
if(isset($object) && property_exists($object, 'prop_name')){
...
}
if(isset($array) && $array['element_key'])){
...
}
if(isset($object) && $object->prop_name)){
...
}
Это само собой разумеется, но также важно знать typeзначение переменной при получении, установке и отключении элемента или свойства; использование неправильного синтаксиса вызовет ошибку.
То же самое при попытке сбросить значение многомерного массива или объекта. Вы должны убедиться, что родительский ключ / имя существует.
if(isset($variable['undefined_key'])){
unset($variable['undefined_key']['another_undefined_key']);
}
if(isset($variable->undefined_prop)){
unset($variable->undefined_prop->another_undefined_prop);
}
Имея дело с объектами, есть еще одна вещь, о которой нужно думать, и это видимость.
Тот факт, что он существует, не означает, что у вас есть разрешение на его изменение.