2015-01-14 34 views
0

有没有什么办法获得调用的方法名称,使用反射或其他?获取调用的方法名称没有__call

假设我有以下类:

abstract class FooController { 

    /** 
    * Current language 
    * @var string 
    */ 
    private $language; 

    /** 
    * Controller action called by framework 
    * @return string 
    */ 
    public function dosomethingAction() 
    { 
     $template = $this->getLocalizedTemplate(); 
     //do something 

     return $template; 
    } 

    /** 
    * Builds template name using current 
    * action name and $language value 
    * @return string 
    */ 
    private function getLocalizedTemplate() 
    { 
     $ACTION_NAME; //how to obtain it? 
     $filteredActionName = preg_replace("/Action$/", "", $ACTION_NAME); 
     return $filteredActionName . "_" . $this->language . '.phtml'; 
    } 

} 
+0

'debug_backtrace()'。但这并不是一种理智的做事方式。你的函数**的行为不应该取决于谁调用它。明确地向前传递信息,不要向后追踪。 – deceze

回答

2

,你可以,如果你那一套在编码这种方式,尝试debug_backtrace,并解析出调用它的类。我不打算演示,因为这不是我所推荐的。

相反,你应该做的是直接注入你需要的数据。你仍然在使用一个函数,所以你没有违反任何编码原则。

public function dosomethingAction() 
{ 
    $template = $this->getLocalizedTemplate('dosomethingAction'); 
    //do something 

    return $template; 
} 

private function getLocalizedTemplate($action) 
{ 
    $filteredActionName = preg_replace("/Action$/", "", $action); 
    return $filteredActionName . "_" . $this->language . '.phtml'; 
} 
+0

感谢您的输入。幸运的是,事实证明,我目前使用的框架能够从应用程序上下文获取当前操作名称。无论如何(至少对我来说)这是一个有趣的问题,除了直接注入外,并不是一个明显的解决方法。 – ex3v