Можно ли использовать эквивалент для атрибутов метода .NET в PHP или каким-то образом имитировать эти?
Контекст
У нас есть собственный класс маршрутизации URL-адресов, который нам очень нравится. То, как он работает сегодня, состоит в том, что мы сначала должны зарегистрировать все маршруты с помощью центрального диспетчера маршрутов, например:
$oRouteManager->RegisterRoute('admin/test/', array('CAdmin', 'SomeMethod'));
$oRouteManager->RegisterRoute('admin/foo/', array('CAdmin', 'SomeOtherMethod'));
$oRouteManager->RegisterRoute('test/', array('CTest', 'SomeMethod'));
Всякий раз, когда встречается маршрут, вызывается метод обратного вызова (в случаях, указанных выше, это статические методы класса). Однако это отделяет маршрут от метода, по крайней мере, в коде.
Я ищу некоторый метод, чтобы поместить маршрут ближе к методу, как вы могли бы сделать в С#:
<Route Path="admin/test/">
public static void SomeMethod() { /* implementation */ }
Мои параметры, которые я вижу сейчас, либо создают какое-то расширение phpDoc, которое позволяет мне что-то вроде этого:
/**
* @route admin/test/
*/
public static function SomeMethod() { /* implementation */ }
Но для этого потребуется писать/повторно использовать парсер для phpDoc и, скорее всего, будет довольно медленным.
Другой вариант состоит в том, чтобы разделить каждый маршрут на собственный класс и иметь следующие методы:
class CAdminTest extends CRoute
{
public static function Invoke() { /* implementation */ }
public static function GetRoute() { return "admin/test/"; }
}
Однако это все равно потребует регистрации каждого отдельного класса, и было бы так много таких классов (не говоря уже о количестве дополнительного кода).
Итак, какие у меня варианты? Каким будет лучший способ сохранить маршрут близко к методу, который он вызывает?