获取不带 __call 的调用方法名称

Get called method name without __call

有没有什么方法可以使用反射或其他方式获取被调用的方法名称?

假设我有以下 class:

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';
    }

}

如果您喜欢用这种方式编码,您可以尝试 debug_backtrace 并解析出调用它的 class。我不打算演示,因为这不是我推荐的。

相反,你应该做的是直接注入你需要的数据。您仍在使用函数,因此您没有违反此处的任何编码原则。

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';
}