Есть ли способ получить имя вызываемого метода, используя отражение или что-то еще?
Предположим, у меня есть следующий класс:
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 и разобрать класс, который назвал это. Я не собираюсь демонстрировать, так как это не то, что я бы рекомендовал.
Вместо этого вам следует вводить нужные вам данные. Вы по-прежнему используете функцию, поэтому здесь вы не нарушаете никаких принципов кодирования.
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';
}
Других решений пока нет …