在 isset() 和 empty() 函数中通过引用传递
Pass by reference in function for isset() & empty()
基本上我想避免做这样的事情:
if((isset($var_1) && !empty($var_1)) || (isset($var_2) && !empty($var_2)) ...) { ....
所以我创建了一个函数来尝试解决它:
function set($item) {
return (isset($item) && !empty($item));
}
传入未设置的变量时,例如:
$args = ['derp'];
if(set($args[0]) || $args[1]) {....
我收到一个抛出的通知,指出 "Offset 1
未设置,但是当我更改函数以通过引用注释 $item
时,它会删除 PHP 通知:
function set(&$item) {
return (isset($item) && !empty($item));
}
Here is a demo
我的问题是 - 这是如何运作的?是因为它引用了原始的 $args
数组吗?我要疯了吗?
当一个函数接受一个引用参数时,关于它未定义的警告在调用时被禁用。这是因为该函数可能用于分配变量,因此传递未定义的变量或不存在的索引不是错误。例如,假设你有一个像这样的函数:
function setTo3 (&$arg) {
$arg = 3;
}
setTo3($array[1]);
没有理由警告 $array[1]
未定义,因为 setTo3()
从不使用参数的值。
基本上我想避免做这样的事情:
if((isset($var_1) && !empty($var_1)) || (isset($var_2) && !empty($var_2)) ...) { ....
所以我创建了一个函数来尝试解决它:
function set($item) {
return (isset($item) && !empty($item));
}
传入未设置的变量时,例如:
$args = ['derp'];
if(set($args[0]) || $args[1]) {....
我收到一个抛出的通知,指出 "Offset 1
未设置,但是当我更改函数以通过引用注释 $item
时,它会删除 PHP 通知:
function set(&$item) {
return (isset($item) && !empty($item));
}
Here is a demo
我的问题是 - 这是如何运作的?是因为它引用了原始的 $args
数组吗?我要疯了吗?
当一个函数接受一个引用参数时,关于它未定义的警告在调用时被禁用。这是因为该函数可能用于分配变量,因此传递未定义的变量或不存在的索引不是错误。例如,假设你有一个像这样的函数:
function setTo3 (&$arg) {
$arg = 3;
}
setTo3($array[1]);
没有理由警告 $array[1]
未定义,因为 setTo3()
从不使用参数的值。