所有关于带有动作助手的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 :(得分: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。