变量引用作为函数参数

时间:2011-12-03 18:20:58

标签: php zend-framework reference function-pointers helper

所有关于带有动作助手的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);

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

<强>更新 Ups,我关闭了我的错误。你(现在我)正在收到错误because...

  

函数调用上没有参考符号 - 仅在函数上   定义。单独的函数定义足以正确传递   参考的论点。从PHP 5.3.0开始,您将收到警告   当你使用&amp; amp;时,不推荐使用“call-time pass-by-reference”   在foo(&amp; $ a);.

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

查看this answer