2011-10-19 7 views
0

私は例えば、PHPクラスの特定の機能のコメントを取得する必要があります:phpクラス関数のコメントを取得するには?

/* Some commets for a class */ 
class Foo extends Bar { 
    function __construct() {} 

    // a single line comment to the function foo() 
    function foo() {} 

    /* a multi-line comment 
    to the function bar() */ 
    public static function bar() {} 

} 

はい、私は簡単にReflectionMethod-> getDocComment()で行うことができることを、知っているが、それは私のために動作しません。なぜなら私はeAcceleratorを使用しており、コードからすべてのコメントを切り捨てるため、getDocCommentは常にFALSEを返します。私はこのような機能を必要とあまりにもeAcceleratorのを再コンパイルする:)

をしたくない

:私は、関数のコメントを返すように$ class_contents、

function get_function_comment($class_contents, $function_name) {} 

は、可変ウィッヒ店です上記の例のようにクラスコンテンツ。

私を助けてください..私はそれを自分自身を実行しようとしましたが、私は適切な正規表現を作成することはできません:)

+2

私は単一の正規表現がそれをカットしようとは思わない。 – GWW

+0

あなたはPHPの構文パーサの全体を実装する正規表現を書くことはできません。 –

+1

これは、*トークンを使わない* Tokenizer(http:// uk3。 php.net/manual/en/book.tokenizer.php)がこれを行う方法になります。 – DaveRandom

答えて

0

適切PHPDOCのコメントを使用してみてください:

/** 
* Something explaining this 
* 
* @return string 
*/ 
function foo(){ } 
+1

どのようなコメントを使用するかは関係ありません。とにかくeAcceleratorはそれをカットします。 – mennanov

1

いやぁ、私はこの正規表現を書くことでほとんど汚い感じがするが、これはトリックを行うかもしれない(それをテストしていないので、私の言葉を取らないでください)。理論的には

preg_match('#(//.*$|/\*.*\*/)\s*$[\s\w]*function\s+$function_name\b#Usmi', $class_contents, $result); 

、それは次のように動作します:

  • いずれかを検索:
    • //、すべてその行の終わりまでOR
    • /*を、そして*まですべて/
  • 次に、行末まで空白をすべて食べてください。
  • "関数"、いくつかの空白、そしてあなたが望む関数名全体を打つまで、次の行の空白または単語文字を取り除く。

実際には、問題に直面した人の中には、「わかっている、私は正規表現を使う」と思う人もいます。

+0

実際には、クラスにもコメントがある場合、これは機能しません。 '/ ** CMSのユーザー管理* /' は 'クラスアクセスadminusersがモジュール{' '}' を拡張するので、それが必要な関数名に授業内容の先頭からテキストを返します。このようなしかし、私はちょうど関数のコメントが必要:) – mennanov

関連する問題