避免函数中出现无法传递引用错误


Avoid cannot pass reference error in function

我有一个函数,其中一个参数通过引用(&)传递。然而,如果我将该参数设置为NULL,我会得到错误:

"无法在…中通过引用传递参数1"

这是脚本:

<?php
function doSomething(&$reference,$arg1,$arg2){
    if($reference !== NULL){
        //Do something with reference
    }else{
        //Do something else
    }
}
//Call with reference
doSomething($a,$b,$c);
//Call without reference
//doSomething(NULL,$b,$c);
?>

我认为这是因为NULL不是作为变量声明的,而是在函数本身中立即声明的。当我这样做的时候它就起作用了:

$nullVar = NULL;
doSomething($nullVar,$b,$c);

我如何编辑我的函数,使其在我刚将NULL放入函数时不会显示引用错误,并且只在可能的情况下保留引用(因为当引用设置为NULL时我不使用它)

如果交换参数的位置,仍然可以创建可选引用:

function doSomething($arg1,$arg2, &$reference = null){
    if($reference !== NULL){
        //Do something with reference
    }else{
        //Do something else
    }
}
$a = 'a';
$b = 'b';
doSomething($a, $b);

但是将null传递给第三个参数仍然会导致错误。

doSomething($a, $b, null); // error

此外,新创建的变量也可以满足引用。由于没有赋值的变量在默认情况下是null,因此您可以提供一个变量,而不打算在以后使用它。

doSomething($a, $b, $unused_var);

您不能引用NULL,它不存在。老实说,在调用函数并运行if($reference!==null)块之前,请检查是否为null。或者,您可以将函数拆分为两个独立的函数,一个是$reference为null,另一个是指向某物的$reference。