2012-03-16 15 views
18

Me gustaría poder implementar anotaciones personalizadas en mis objetos PHP5, y me gustaría aprender cómo funciona todo el proceso construyendo mi propio analizador.¿Cómo encontrar anotaciones en un objeto PHP5?

Para empezar, necesito saber cómo ENCONTRAR las anotaciones.

¿Hay algún método de reflexión que me falta o hay alguna otra manera?

Por ejemplo, me gustaría ser capaz de encontrar la siguiente anotación en una clase:

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

posible duplicado de http://stackoverflow.com/search?q=annotation+parser+php – Gordon

+1

¿Por qué no utilizar una biblioteca como las anotaciones doctrinales? – leyou

Respuesta

41

Usted puede hacer esto utilizando ReflectionClass::getDocComment, ejemplo:

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

Demostración en directo: http://codepad.viper-7.com/u8bFT4

+0

Si hay varios comentarios en el archivo, ¿los agarrará a todos? – johnnietheblack

+0

'-> getDocComment()' solo obtiene el comentario del documento asociado con el objeto que está examinando (el comentario docblock inmediatamente anterior a la declaración de esa cosa). También puede obtener comentarios de doc sobre objetos, clases, métodos, funciones y propiedades. – MightyE

+2

@johnnietheblack puede usar http://php.net/manual/pl/class.reflectionmethod.php - para obtener comentarios solo para el método especificado. – Slawek

8

, usted puede obtener bloque de comentarios utilizando el método objeto getDocComment Reflexión.

Si no desea recuperar anotaciones a mano, puede utilizar Zend Framework Reflection u otra solución existente

+0

['doctrine/annotations'] (https://github.com/doctrine/annotations) es el más popular – DanFromGermany

Cuestiones relacionadas