2012-03-16 12 views
18

Mi piacerebbe essere in grado di implementare annotazioni personalizzate nei miei oggetti PHP5 e mi piacerebbe imparare come funziona l'intero processo costruendo il mio parser.Come trovare le annotazioni in un oggetto PHP5?

Per iniziare, però, ho bisogno di sapere come trovare le annotazioni.

C'è un metodo di riflessione che mi manca, o c'è un altro modo?

Per esempio, mi piacerebbe essere in grado di trovare la seguente annotazione in una classe:

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

possibile duplicato di http://stackoverflow.com/search?q=annotation+parser+php – Gordon

+1

Perché non utilizzare una libreria come le annotazioni sulla dottrina? – leyou

risposta

41

È possibile farlo utilizzando ReflectionClass::getDocComment, ad esempio:

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

Demo online: http://codepad.viper-7.com/u8bFT4

+0

Se ci sono più commenti nel file, li prenderà tutti? – johnnietheblack

+0

'-> getDocComment()' ottiene il commento del documento associato all'oggetto che stai esaminando (il commento del docblock immediatamente precedente alla dichiarazione di quella cosa). È inoltre possibile ottenere commenti doc su oggetti, classi, metodi, funzioni e proprietà. – MightyE

+2

@johnnietheblack è possibile utilizzare http://php.net/manual/pl/class.reflectionmethod.php - per ottenere commenti solo per il metodo specificato. – Slawek

8

si può ottenere blocco di commento con il metodo oggetto getDocComment Riflessione.

Se non si desidera recuperare annotazioni a mano, è possibile utilizzare Zend Framework Reflection o altra soluzione esistente

+0

['doctrine/annotations'] (https://github.com/doctrine/annotations) è il più popolare – DanFromGermany

Problemi correlati