Можно ли использовать эквивалент для атрибутов метода .NET в PHP или каким-то образом смоделировать их?
Context
У нас есть собственный класс маршрутизации URL, который нам очень нравится. Сегодня это работает так, что сначала мы должны зарегистрировать все маршруты в центральном диспетчере маршрутов, например:
$oRouteManager->RegisterRoute('admin/test/', array('CAdmin', 'SomeMethod'));
$oRouteManager->RegisterRoute('admin/foo/', array('CAdmin', 'SomeOtherMethod'));
$oRouteManager->RegisterRoute('test/', array('CTest', 'SomeMethod'));
Всякий раз, когда встречается маршрут, вызывается метод обратного вызова (в приведенных выше случаях это статические методы класса). Однако это отделяет маршрут от метода, по крайней мере, в коде.
Я ищу какой-нибудь способ приблизить маршрут к методу, как вы могли бы сделать в C #:
<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/"; }
}
Однако для этого все равно потребуется регистрация каждого отдельного класса, и таких классов будет очень много (не говоря уже о количестве дополнительного кода).
Так, каковы мои варианты здесь? Каков наилучший способ держать маршрут близко к методу, который он вызывает?