我有一个功能a。多次重复使用没有任何问题。但现在我无法调用该功能。这是我的功能
function a($a,&$b){
// functions code here
}
我这样称呼函数。
a(3,null);
我的代码错误是什么?
答案 0 :(得分:2)
您正试图通过引用传递null
。
function a($a,&$b){
// functions code here
}
a(3,$otherVar);
// A copy of 3 is sent to the function.
// $otherVar is actually passed to the function
你可以在紧要关头也使用这样的东西:
$null = 0; // Throwaway variable
a($a, $null);
但是如果你通过引用传递,为什么你想发送一个null吗?当然,修改第二个变量内容的代码位是出于某种目的吗?
你正在做的几乎是一个想要使用函数重载的完美例子,PHP不支持这一点是一种耻辱。
您可能需要考虑的另一个想法 - 将数组作为参数传递给它:
$myVars=array( 'first' => $a, 'second' => $otherVar);
a($myVars);
您可以根据需要传递任意数量的项目,您可以将其作为参考传递保留,但最终会更改数组,而不是直接更改变量。在您的函数中,您只需选择永不修改first
,并根据需要使用second
(如果存在)。
可以使用可选参数,但不像您想象的那样直观,并且不会对您给出的示例起作用:
function makecoffee($var, &$type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee(1);
echo makecoffee(1,null);
输出:
Fatal error: Only variables can be passed by reference in
/var/www/test.php on line 7
这是因为null
仍然无法通过引用传递。但是,你可以使用第一个没有错误的回声。
答案 1 :(得分:2)
你会看到你收到的错误信息是
PHP Fatal error: Only variables can be passed by reference in SOMETHING.php on line xxx
这是因为你的函数说它的第二个参数是一个引用(即&$b
),这要求你传递一个变量。你实际上是在传递null
而不是一个变量,因此就是问题。
如果您需要第二个参数作为参考(并且解决此问题的一种方法可能是删除该要求),请传递设置为null的变量。 E.g。
$c = null;
a(3, $c);
答案 2 :(得分:-1)
应该是:
function a($a,$b=false){
// functions code here
}