在函数中通过引用传递给isset()&空()

时间:2015-07-16 02:21:24

标签: php pass-by-reference

基本上我想避免做这样的事情:

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数组吗?我疯了吗?

1 个答案:

答案 0 :(得分:5)

当函数采用by-reference参数时,在调用时禁用有关未定义的警告。这是因为该函数可能用于分配变量,因此传递未定义的变量或不存在的索引不是错误。例如,假设你有一个像:

这样的函数
function setTo3 (&$arg) {
    $arg = 3;
}

setTo3($array[1]);

没有理由警告$array[1]没有被定义,因为setTo3()从不使用参数的值。