Работа с аннотациями в PHP
Во всех современных фреймворках очень часто используются аннотации. В PHP аннотации реализуются через Reflection API.
Вот пример того, как аннотация используется в контроллерах:
/**
* @Folder('src/Controllers')
* @Type('Controller')
*
*/
class PageController extends Controller
{
/**
* @Route('/')
*
*/
public function actionIndex() : Response
{
return new Response('Главная страница');
}
/**
* @Route('/contacts/')
*
*/
public function actionContacts() : Response
{
return new Response('Наши контакты');
}
/**
* @Route('/article/(\d+)')
*
*/
public function actionArticle(int $id) : Response
{
return new Response('Наши контакты');
}
}
Как видно, аннотации в PHP обозначаются как в примере выше: сначала идет знак @, а затем название аннотации.
Получить эти аннотации для дальнейшей обработки можно с помощью Reflection API. Пример скрипта ниже:
$ref = new ReflectionClass(PageController::class);
// получаем комментарии к классу
print $class_comments = $ref -> getDocComment();
// получаем комментарии к методу
$method_comments = $ref -> getMethod('actionContacts') -> getDocComment();
print $method_comments;
// регулярное выражение для получения аннотации
// в зависимости от вашего типа аннотации, оно можеть быть разным
$pattern = "##";
// получаем все аннотации для класса
preg_match_all($pattern,$method_comments, $matches)
print_r($matches);
Вот так можно вытащить документированные комментарии к классу или методу в PHP.
-
- Михаил Русаков
Комментарии (3):
Не пойму зачем писать такие "статьи"? Те, кто ничего не знал на эту тему так ничего и не поймут. А тем, кто в курсе, тем эта статья и нах не нужна! Если вам надо писать такие статьи для продвижения сайта, то уберите их из рассылки хотя бы!
Ответить
Почему не поймут, скажите, пожалуйста? Что именно не понятно?
Ответить
Следовало бы статью начать с объяснений, что такое "аннотация". Читатель не понимает о чем вообще идет речь, здесь же не сидят программисты.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.