2009-04-02 8 views
8

レイアウトにあまり標準ではないコードベースを持っているので、自家製の自動化されたドキュメントを作成しています。PHPファイルを読み込んでコメントブロックの内容を取得するのが最善の方法であると思っていました。私が考えることができる唯一の方法は、ファイルを開いて行単位で読むことですが、Reflection関数と同様に、ドキュメントを解析する組み込みの魔法がい​​くつかあると考えました。PHPでコメントブロックを読むには?

各ファイルの基本的なレイアウトは、このようなものです:

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

それは、これらのファイルは、その中で定義された任意の関数やクラスを持っていないことに注意することが重要です。コメントは、スクリプト全体に関連しています。

答えて

15

チェックアウトTokenizer

$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

より具体的にgetDocComment()、PHP5が付属していますReflection APIを見てください:

PHP 5が来るtest.phpあなたがしたいという名前のファイル内のすべてのコメントを取得するために

リバースエンジニアのクラス、インターフェイス、 の機能、メソッド、および 拡張機能を追加する完全な反映 APIを使用してください。さらに、 リフレクションAPIは、 の関数のドキュメントコメントを取得する方法、 のクラスとメソッドを提供しています。

また、コードベースのサイズによっては、すでにかなり近いと思われるphpDocumentorの構文に合わせてコメントを変更することで、作業量が少なくなる可能性があります。 getDocComment()

+1

適用されます。反射関数は、関数、クラス、オブジェクトなどにのみ適用されるようです。解析するファイルを渡すことはできますか? – nickf

+0

+1 phpDocumentor、特にそのコードがすでにフォーマッタである場合。 – jmucchiello

1

複数のdocコメントがある場合は、遭遇した最後はそれが本当に非常に奇妙なレイアウトであると私は怖い非常に特定の出力を必要と