Memo

メモ > 技術 > プログラミング言語: PHP > アノテーション

アノテーション
PHPのアノテーションの仕組みとメリット・デメリット / About PHP annotations - Speaker Deck https://speakerdeck.com/hiro_y/about-php-annotations PHPアノテーションの秘訣!5つのステップで理解・活用する方法 - Japanシーモア https://jp-seemore.com/web/5644/ リフレクションを使用すると、アノテーションを取得できる。 フレームワークのSymfonyでは、アノテーションが多用されている。
<?php $reflection = new ReflectionClass('Sample'); echo 'getName: ' . $reflection->getName() . '<br>'; echo 'getFileName: ' . $reflection->getFileName() . '<br>'; echo '<br>'; echo 'class: ' . $reflection->getDocComment() . '<br>'; echo '<br>'; echo 'property name: ' . $reflection->getProperty('name')->getDocComment() . '<br>'; echo 'property age: ' . $reflection->getProperty('age')->getDocComment() . '<br>'; echo '<br>'; $docComment = $reflection->getMethod('specialMethod')->getDocComment(); echo 'method specialMethod: ' . $docComment . '<br>'; if (preg_match('/@CustomAnnotation\("(.*)"\)/', $docComment, $matches)) { echo 'method specialMethod CustomAnnotation: ' . $matches[1] . '<br>'; } echo '<br>'; $docComment = $reflection->getMethod('createItem')->getDocComment(); echo 'method createItem: ' . $docComment . '<br>'; if (preg_match('/@Route\("(.*)", methods={"(.*)"}\)/', $docComment, $matches)) { echo 'method createItem path: ' . $matches[1] . '<br>'; echo 'method createItem method: ' . $matches[2] . '<br>'; } exit; /** * @SampleClass */ class Sample { /** ** @var string */ public $name; /** * @var int */ public $age; /** * @CustomAnnotation("special value") */ public function specialMethod() { return; } /** * @Route("/api/items", methods={"POST"}) */ public function createItem() { return; } }

Advertisement