我的php函数有什么错误


Whats the error in my php function?

我有一个函数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
    }