このクラスは、アノテーションを読み取り、それらを1つの配列に変換する1つの静的メソッドを使用して作成しました。したがって、このコード:
/**
* @MyAnnotation(attr1=value,attr2=value);
*/
class MyClass
{
public static function readMyAnnotation()
{
$classComment = (new ReflectionClass(get_class()))->getDocComment();
$comments = explode("\n", $classComment);
foreach ($comments as $item) {
if(strpos($item, "@")) {
$comment = explode("@", $item);
$annotation = explode(")", $comment[1])[0];
$annotationName = explode("(", $annotation)[0];
$annotationValue = explode("(", $annotation)[1];
$annotationParams = explode(",", $annotationValue);
$params = [];
foreach ($annotationParams as $item) {
$params[explode("=", $item)[0]] = explode("=", $item)[1];
}
print_r([$annotationName => $params]);
}
}
}
}
MyClass::readMyAnnotation();
これを出力します:
Array ( [MyAnnotation] => Array ( [attr1] => value [attr2] => value ) );
誰かが正規表現を使用してこのコードを最適化するのを手伝ってもらえますか?正規表現で良いコードを書くことができません。私のコードはうまく機能しますが、私はそれが好きではありません!
/**
* @MyAnnotation(attr1=value,attr2=value);
*/
class MyClass
{
public static function readMyAnnotation()
{
$classComment = (new ReflectionClass(get_class()))->getDocComment();
$comments = explode("\n", $classComment);
foreach ($comments as $item) {
if(strpos($item, "@")) {
/* ?????????????? */
print_r([$annotationName => $params]);
}
}
}
}