メモ > 技術 > プログラミング言語: 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