什么是我的PHP功能错误?

时间:2012-08-30 08:59:06

标签: php

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

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

我这样称呼函数。

a(3,null);

我的代码错误是什么?

3 个答案:

答案 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
    }