我有一个函数a。它被多次重复使用,没有任何问题。但是现在我不能调用函数了这是我的功能
function a($a,&$b){
// functions code here
}
我这样调用函数a。
a(3,null);
我的代码有什么错误?
您将看到沿着的行收到一条错误消息
PHP Fatal error: Only variables can be passed by reference in SOMETHING.php on line xxx
这是因为你的函数说它的第二个参数是引用(即&$b
),这需要你传递一个变量。实际上,您传递的是不是变量的null
,因此出现了问题。
如果您需要第二个参数作为引用(解决此问题的一种方法可能是删除该要求),则传递一个设置为null的变量。例如
$c = null;
a(3, $c);
您正试图通过引用传递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
仍然不能通过引用传递。但是,您可以毫无错误地使用第一个回波。
应该是:
function a($a,$b=false){
// functions code here
}