Php 从非控制器类调用操作帮助器

Php 从非控制器类调用操作帮助器,php,zend-framework,Php,Zend Framework,我有一个动作助手,我通常在控制器中调用它,如下所示: public function myAction(){ //some work $this->_helper->someHelper(); //some other work } 我对代码进行了更改,以便myAction现在在类中调用一个方法myActionWork(),而该方法正是起作用的 public function myAction(){ SomeClass::myActionWork(); }

我有一个动作助手,我通常在控制器中调用它,如下所示:

public function myAction(){
   //some work
   $this->_helper->someHelper();
   //some other work
}
我对代码进行了更改,以便
myAction
现在在类中调用一个方法
myActionWork()
,而该方法正是起作用的

public function myAction(){
   SomeClass::myActionWork();
}
myActionWork()
方法是起作用的方法,所以我把3行放在那里。但是,其中1行是对动作助手的调用
someHelper()
。那么,如何在普通类中仍然使用动作助手呢?我可以这样做吗,或者解决这个问题

class SomeClass {

    public static myActionWork()
    {
       //some work
       $this->_helper->someHelper();
       //some other work
    }       

虽然这听起来有点混乱,但您始终可以将助手作为参数传递,例如

class SomeClass {

    public static myActionWork(Zend_Controller_Action_Helper_SomeHelper $helper)
    {
       //some work
       $helper->someHelper();
       //some other work
    }
从您的助手处,呼叫

SomeClass::myActionWork($this->getActionController()->getHelper('SomeHelper'));
更新 另一种方法是静态地从助手代理中拉出所需的助手,例如

$someHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('SomeHelper');

如果有其他方法,我不想通过动作助手。@sameold为什么不呢?如果你要使用它,它需要在那里。不过我已经想到了另一种方法,将更新我的答案。