Php 变量引用作为函数参数

Php 变量引用作为函数参数,php,zend-framework,reference,function-pointers,helper,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']); }

所有关于Zend应用程序和操作助手的信息

我想通过函数取消设置数组的某些对。

helper:

class Application_Controller_Action_Helper_TestHelper extends Zend_Contr[...]
{    
    public function direct(&$array)
    {
        if(isset($array['key']))
            unset($array['key']);
    }
}
$this->_helper->TestHelper($var);
控制器:

class Application_Controller_Action_Helper_TestHelper extends Zend_Contr[...]
{    
    public function direct(&$array)
    {
        if(isset($array['key']))
            unset($array['key']);
    }
}
$this->_helper->TestHelper($var);

如何使其工作?

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

class Application_Controller_Action_Helper_TestHelper extends Zend_Contr[...] {
    public function direct(&$var) {
        $var = $var + 1;
    }
}
您还必须将其作为引用传递:
$this->\u helper->TestHelper(&$var)

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

函数调用上没有引用符号-仅在函数上 定义。仅函数定义就足以正确传递 这个论据是引用的。从PHP5.3.0开始,您将得到一个警告 当您使用& 以foo(&$a)表示

ZF的HelperBroker使用
返回调用用户函数数组(数组($helper,'direct'),$args)
调用direct()方法。检查,但似乎
call\u user\u func\u数组
是通过引用传递的,尽管有一些怪癖


请检查。

您的pass-by-ref示例应该已经起作用了。不是吗?请解释一下你得到的行为……在我的应用程序中,我希望助手取消设置一些数组对(参数)。它看起来像:
public function direct(&$array){if(isset($array['controller']))unset($array['controller']);}
没有错误,也没有警告,但数组与以前完全一样。我想你在“我想要的是这个”下面给出的示例除了赋值的左边
var=$var+1
应该是
$var
而不是
var
@share之外,应该工作得很好。这很奇怪。。。你确定吗?您是否尝试过在调用
direct()
进行检查之前和之后传递的$数组
print\r()
?例如,是否可能是在实际代码中的
isset()
调用中使用了错误的键?这会使阵列看起来没有改变。。。(我测试了你在这里发布的函数,对我来说数组发生了变化。)@eljunior通过测试,我注意到unset()只取消了引用数组的设置,而不是真正的数组。(用数组更新了主帖子)不幸的是,我的帖子中只有一个键入错误,但我的代码中没有…;-)哦,有一个问题:我得到的
调用时间传递引用已被弃用
为什么?这意味着我必须这样调用<代码>$var=&$parameter$这个->\u helper->TestHelper($var)