在 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() 从不使用参数的值。