获取不带 __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';
}
有没有什么方法可以使用反射或其他方式获取被调用的方法名称?
假设我有以下 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';
}