Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend框架:按引用传递到视图帮助程序不工作_Php_Zend Framework_Pass By Reference_View Helpers - Fatal编程技术网

Php Zend框架:按引用传递到视图帮助程序不工作

Php Zend框架:按引用传递到视图帮助程序不工作,php,zend-framework,pass-by-reference,view-helpers,Php,Zend Framework,Pass By Reference,View Helpers,下面是一个简单的视图帮助器(请注意passbyreference参数): 这在视图中不起作用$array['someExistingKey']仍处于设置状态(在方法的直接上下文中除外)。Zend必须采取措施防止数组通过引用传入。有什么解决方案吗?当您从模板中调用$this->MyViewHelper($array)时,实际上并不是直接调用helper类,Zend_View正在实例化该类并为您调用它。所以我想你可能很难让它工作。您最好的选择可能是使用Zend_注册表或重构,以采用不需要全局的不同方

下面是一个简单的视图帮助器(请注意passbyreference参数):


这在视图中不起作用<代码>$array['someExistingKey']仍处于设置状态(在方法的直接上下文中除外)。Zend必须采取措施防止数组通过引用传入。有什么解决方案吗?

当您从模板中调用
$this->MyViewHelper($array)
时,实际上并不是直接调用helper类,Zend_View正在实例化该类并为您调用它。所以我想你可能很难让它工作。您最好的选择可能是使用Zend_注册表或重构,以采用不需要全局的不同方法。

我刚刚想到了一个解决方法。您只需手动调用帮助程序,而不是让ZF通过
call\u user\u func\u array
调用它

Ref.php

class Zend_View_Helper_Ref extends Zend_View_Helper_Abstract
{
    public function removeFromRef(&$ref)
    {
        // change your var value here
        unset($ref['key']);
    }

    /**
     * ZF calls this for us, but we'll call what we want, so you can skip this.
     */
//    public function ref()
//    {}
}
如您所见,您可以跳过必须将主方法命名为文件名的约定,但我仍然建议您这样做。 现在,您可以在视图/控制器中传递引用:

// in view:
$this->getHelper('Ref')->removeFromRef($someVar2Change);
// in controller
$this->view->getHelper('Ref')->removeFromRef($someVar2Change);
基本上,这就是
$this->ref()
所做的:获取帮助程序,然后调用
call\u user\u func\u数组


虽然有些人在使用
$this->getHelper('Ref')->Ref()
而不是
$this->Ref()
时可能会遇到问题,但它是有效的。

这很令人失望,但可以理解。(顺便说一句,这并不是一个真正的“全球”,但我知道你的意思。)参见Zend_View_Abstract::_call()。它使用
call\u user\u func\u数组
来调用助手类。看见
// in view:
$this->getHelper('Ref')->removeFromRef($someVar2Change);
// in controller
$this->view->getHelper('Ref')->removeFromRef($someVar2Change);