获取没有__call的被调用方法名称

时间:2015-01-14 12:58:22

标签: php reflection stack-trace

有没有办法获得调用的方法名称,使用反射或其他任何东西?

假设我有以下课程:

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

}

1 个答案:

答案 0 :(得分: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';
}