2009-04-02 11 views
8

Robię trochę zautomatyzowanej dokumentacji domowej, ponieważ mam bazę kodów, która nie jest zbyt standardowa w swoim układzie, i zastanawiałem się, jaki jest najlepszy sposób na odczytanie pliku PHP i pobranie zawartości bloku komentarza. Jedyny sposób, w jaki mogę to zrobić, to otworzyć plik i przeczytać go wiersz po wierszu, ale pomyślałem, że być może istnieje wbudowana magia, która będzie dla mnie analizować dokument, podobnie jak funkcje Reflection.Jak czytać bloki komentarzy w PHP?

Podstawowy układ każdego pliku jest tak:

<?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. 

Ważne jest, aby pamiętać, że pliki te nie mają żadnych funkcji lub klas zdefiniowanych w nich. Komentarze odnoszą się do skryptu jako całości.

Odpowiedz

15

Zapoznaj się z Tokenizer.

Aby uzyskać wszystkie komentarze w pliku o nazwie test.php chcesz zrobić:

$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

Wystarczy popatrzeć na Reflection API że pochodzi z PHP5, dokładniej getDocComment():

PHP 5 pochodzi z pełną refleksją API , które dodaje możliwość klas inżynierii wstecznej, interfejsów, funkcji i metod oraz rozszerzeń . Ponadto interfejs API do odczytywania oferuje również sposoby pobierania komentarzy do funkcji i klas.

Ponadto, w zależności od wielkości kodzie, może pracować mniej, modyfikując swoje komentarze w celu dopasowania do składni phpDocumentor, który jest już wydaje się dość blisko.

+1

to naprawdę jest bardzo dziwny układ i wymaga bardzo specyficznego wyjście obawiam się. Funkcje refleksji wydają się mieć zastosowanie tylko do funkcji, klas, obiektów itp. Czy możesz przekazać plik do przeanalizowania? – nickf

+0

+1 phpDocumentor, zwłaszcza jeśli kod jest już dla niego formaterem. – jmucchiello

1

Z getDocComment() jeśli istnieje wiele komentarzy doc, ostatni spotkałem dotyczy