在调用时通过引用传递已被弃用(实际上自 5.4 起已删除):
从 PHP 5.3.0 开始,当您在 foo(&$a); 中使用 & 时,您将收到一条警告说“调用时传递引用”已被弃用。从 PHP 5.4.0 开始,调用时传递引用已被删除,因此使用它会引发致命错误。
来自 php 的文档。
传递对布尔值的引用也没有真正意义。理论上,PHP 引用占用的内存与 C 指针(4 个字节)相同,布尔值可能是一个(短)int,只需要 2 个字节。如果有的话,我会说你会产生更多的开销。
如果您通过引用另一个函数/方法来传递对象或数组,则必须相应地定义函数:
function doStuff_byRef(array &$arg)
{
$arg[] = 'add new stuff';
}
像在 JS 中所做的那样,通过引用传递函数在 PHP 中是不可能的。但是,您可以定义一个函数不返回值,而是返回对其返回值的引用:
public function &getPropertyRef()
{
return $this->property;
}
但是,在您的情况下,我只需这样做:
$this->check(1==2, 't', 'f');//pass method names
private function check($stmt, $func1, $func2)
{
//don't use eval, btw
if ($stmt)
{
return $this->{$func1}();
}
return $this->{$func2}();
}
或者,更灵活:
$this->check(1==2, array($this, 't'), array($this, 'f'));//pass method names
private function check($stmt, array $func1, array $func2)
{
//don't use eval, btw
if ($stmt)
{
return call_user_func_array($func1);
}
return call_user_func_array($func2);
}
我想,如果你的 PHP >= 5.3,你可以使用一个闭包实例:
private function check($stmt, Closure &$func1, Closure &$func2)
{
return $stmt ? $func1() : $func2();
}
然后,您可以这样做:
$functionReference = function()
{
echo 'true';
return true;
};
$functionRef2 = function()
{
echo 'false';
return false;
};
$this->check(true, $functionReference, $functionRef2);
但这增加了更多的开销:PHP 闭包只是添加到语言中的那些东西之一,不应该存在。它在编译时创建类的一个实例Closure
,然后该对象通过引用传递。老实说,在你的情况下,最好的方法是我的第一个建议,仍然,恕我直言($this->{$func1}();
)