2009-04-02 32 views
8

Estoy haciendo algunos documentos automatizados caseros, ya que tengo una base de código que no es muy estándar en su diseño, y me preguntaba cuál era la mejor manera de leer un archivo PHP y tomar el contenido de un bloque de comentarios. La única forma en que puedo pensar en hacerlo es abrir el archivo y leerlo línea por línea, pero pensé que tal vez había alguna magia incorporada que analizaría el documento para mí, similar a las funciones de reflexión.¿Cómo se leen los bloques de comentarios en PHP?

El diseño básico de cada archivo es la siguiente:

<?php // $Id$ 
/** 
* Here is this script's documentation, with information in pseudo-javadoc 
* type tags and whatnot. 
* 
* @attr something some information about something 
* @attr etc   etc etc 
*/ 
// rest of the code goes here. 

Es importante tener en cuenta que estos archivos no tienen funciones o clases definidas en ellos. Los comentarios se relacionan con el guion como un todo.

Respuesta

15

Echa un vistazo Tokenizer.

para obtener todos los comentarios en un archivo llamado test.php que harías:

$tokens = token_get_all(file_get_contents("test.php")); 
$comments = array(); 
foreach($tokens as $token) { 
    if($token[0] == T_COMMENT || $token[0] == T_DOC_COMMENT) { 
     $comments[] = $token[1]; 
    } 
} 
print_r($comments); 
2

Tener un vistazo a la Reflection API que viene con PHP5, más específicamente getDocComment():

PHP 5 viene con una reflexión completa API que agrega la capacidad de clases de ingeniería inversa, interfaces, funciones y métodos , así como extensiones . Además, la API de reflexión también ofrece formas de recuperar los comentarios de los documentos para las funciones, clases y métodos.

También, dependiendo del tamaño de su base de código, es posible trabajar menos modificando sus comentarios para adaptarse a la sintaxis phpDocumentor, que ya se parece bastante cerca.

+1

lo que realmente es un diseño muy extraño y requiere una salida muy específico me temo. Las funciones de reflexión solo se aplican a funciones, clases, objetos, etc. ¿Se puede pasar un archivo para analizar? – nickf

+0

+1 phpDocumentor, especialmente si el código ya está formateado. – jmucchiello

1

Con getDocComment() si hay varios comentarios de documentación, se aplica la última encontrado

Cuestiones relacionadas