2011-10-19 43 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在太:)

我需要這樣的功能:

function get_function_comment($class_contents, $function_name) {} 

,這樣我會返回一個函數的評論,$ class_contents是可變至極存儲如上例所示。

我試着做我自己,但我不能創造一個適當的正則表達式..

請幫我:)

+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); 

從理論上講,它的工作原理是:

  • 既找不到:
    • //一切,直到該行的結尾或
    • /*,那麼一切直到*/
  • 然後吃掉所有的空白直到行尾
  • 在下一行中輸入任意數量的空格或單詞字符,直到您點擊「功能」,某些空格,然後是您想要的整個函數名稱。

實踐中:「有些人在遇到問題時會想」我知道,我會用正則表達式「,現在他們有兩個問題。

+0

實際上,課堂上也有評論時,這不起作用。就像這樣: '/ ** CMS用戶管理* /'' 類Adminusers擴展模塊{' '}' 所以它返回從上課內容所需的函數名開頭的文本。但我只需要函數的評論:) – mennanov