-3

我有一个功能。多次重复使用,没有任何问题。但现在我无法调用该函数。这是我的功能

function a($a,&$b){
        // functions code here
        }

我像这样调用函数。

a(3,null);

我的代码有什么错误?

4

3 回答 3

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);

但是如果你是通过引用传递的,你为什么要给它一个空值呢?当然,修改第二个变量内容的代码是出于某种目的吗?

顺便说一句,您所做的几乎是想要使用函数重载的完美示例,可惜 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仍然不能通过引用传递。但是,您可以使用第一个回声而不会出错。

于 2012-08-30T09:01:26.750 回答
2

你会看到你收到一条错误消息

PHP Fatal error:  Only variables can be passed by reference in SOMETHING.php on line xxx

这是因为你的函数说它的第二个参数是一个引用(即&$b),这需要你传递一个变量。您实际上传递null的是不是变量,因此是问题所在。

如果您需要第二个参数作为参考(解决此问题的一种方法可能是删除该要求)传递一个设置为 null 的变量。例如

$c = null;
a(3, $c);
于 2012-08-30T09:04:27.347 回答
-1

它应该是 :

 function a($a,$b=false){
        // functions code here
    }
于 2012-08-30T09:01:14.343 回答