如果您想取消设置变量,则可以使用 unset
unset($any_variable); // bool, object, int, string etc
在尝试取消设置变量时检查它的存在没有任何好处。
如果变量是一个数组并且您希望取消设置一个元素,您必须首先确保 parent 存在,这也适用于对象属性。
unset($undefined_array['undefined_element_key']); // error - Undefined variable: undefined_array
unset($undefined_object->undefined_prop_name); // error - Undefined variable: undefined_object
这很容易通过将unset 包装在if(isset($var)){ ... } 块中来解决。
if(isset($undefined_array)){
unset($undefined_array['undefined_element_key']);
}
if(isset($undefined_object)){
unset($undefined_object->undefined_prop_name);
}
我们只检查变量(parent)的原因仅仅是因为我们不需要检查属性/元素,这样做会增加编写和计算的速度额外检查。
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)){
...
}
这是不言而喻的,但在获取、设置和取消设置元素或属性时知道变量的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);
}
在处理对象时,还需要考虑另一件事,那就是可见性。
仅仅因为它存在并不意味着您有权修改它。