2012-03-16 2 views
18

PHP5オブジェクトにカスタムアノテーションを実装したいと思っています。独自のパーサを構築することによって、プロセス全体がどのように機能するのかを知りたいと思います。PHP5オブジェクトの注釈の検索方法は?

しかし、私は注釈を見つける方法を知る必要があります。

私が紛失しているReflectionメソッドがありますか、別の方法がありますか?

例えば、私はクラスで、次の注釈を見つけることができるようにしたい:

/** 
* @MyParam: myvalue 
*/ 
+0

可能な複製http://stackoverflow.com/search?q=annotation+parser+php – Gordon

+1

なぜdoctrineアノテーションのようなライブラリを使用しないのですか? – leyou

答えて

41

使用することができます。

function getClassAnnotations($class) 
{  
    $r = new ReflectionClass($class); 
    $doc = $r->getDocComment(); 
    preg_match_all('#@(.*?)\n#s', $doc, $annotations); 
    return $annotations[1]; 
} 

ライブデモ:http://codepad.viper-7.com/u8bFT4

+0

ファイルに複数のコメントがある場合は、それらをすべて取得しますか? – johnnietheblack

+0

' - > getDocComment()'は、あなたが調べているオブジェクトに関連するドキュメンテーションコメント(そのものの宣言の直前のdocblockコメント)を取得するだけです。また、オブジェクト、クラス、メソッド、関数、およびプロパティに関するドキュメンテーションコメントを得ることもできます。 – MightyE

+2

@johnnietheblack http://php.net/manual/pl/class.reflectionmethod.phpを使用すると、指定されたメソッドについてのみコメントを取得できます。 – Slawek

8

あなたはgetDocCommentリフレクションオブジェクトのメソッドを使用してコメントブロックを得ることができます。

あなたが手で注釈を取得したくない場合は、あなたがこのReflectionClass::getDocComment、例を使用して行うことができますZend Framework Reflectionまたは他の既存のソリューション

+0

['doctrine/annotations'](https://github.com/doctrine/annotations)が最も人気があります – DanFromGermany

関連する問題