2011-12-03 123 views
0

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

我怎么能得到它的工作?

+0

你的pass-by-ref应该已经工作了。不是吗?请解释你得到的行为...... – elias

+0

在我的应用程序中,我希望帮助程序取消设置数组(参数)的一些对。它看起来像: 'public function direct(&$ array){if(isset($ array ['controller']))unset($ array ['controller']); }' 没有错误,也没有警告,但数组与以前完全一样。 – danijar

+0

我想你在“我想要的就是这个”下给出的例子应该工作得很好,除了赋值'var = $ var + 1'的左边应该读取'$ var'而不是'var ' – Abhay

回答

0

您还必须把它作为参考
$this->_helper->TestHelper(&$var);

UPDATE: UPS,我有我的错误关闭。你(现在我)所得到的是错误because...

有一个函数调用无符号 - 只有函数定义 。单独的函数定义足以通过引用正确地传递参数 。从PHP 5.3.0开始,当您在foo(& $ a);中使用& 时,您将收到警告 ,声称“不需要通过呼叫时传递”。

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

结账this answer

+0

嘿,工程太棒了! – danijar

+0

哦,有一个问题:我得到'通过引用调用时传递已被弃用'为什么? – danijar

+0

那意味着我必须这样打电话吗? '$ var =&$ paramter; $这 - > _ helper-> TestHelper($ VAR);' – danijar

2

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

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

不幸的是,只是在我的文章中输入错误,但没有在我的代码中...;-) – danijar

相关问题