作为函数参数的变量引用


Variable Reference as Function Argument

关于带有操作助手的Zend应用程序的一切。

我想通过函数取消数组的一些对。

helper:

class Application_Controller_Action_Helper_TestHelper extends Zend_Contr[...]
{    
    public function direct(&$array)
    {
        if(isset($array['key']))
            unset($array['key']);
    }
}

controller:

$this->_helper->TestHelper($var);

我怎么能让它工作?

由于您现在是通过引用传递的,因此您可以修改方法中的变量,并且更改将应用于原始变量。但是,现在的方法是根本不改变变量,只是返回表达式的结果,就像第一个示例一样。你应该这样写:

class Application_Controller_Action_Helper_TestHelper extends Zend_Contr[...] {
    public function direct(&$var) {
        $var = $var + 1;
    }
}

您还必须将其作为引用传递:
$this->_helper->TestHelper(&$var);

更新:Ups,我把错误关掉了。你(现在我)得到错误,因为…

在函数调用中没有引用符号——只有函数定义。函数定义本身就足以正确传递引用式参数。从PHP 5.3.0开始,您将得到一个警告当您使用&在foo(和一个美元);。

ZF的HelperBroker使用return call_user_func_array(array($helper, 'direct'), $args);调用您的direct()方法。检查文档,但call_user_func_array似乎通过引用传递,尽管有几个怪癖。