2011-10-19 3 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

어지럽게 돌아 다니는 * lot * 없이는 가능하다면, [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); 

는, 작동과 같은 :

  • 찾기 중 하나
    • // 그리고 모든 것을 그 라인의 끝 부분까지
    • /* 다음 모든 것을 할 때까지 */
  • 그런 다음 줄 끝까지 모든 공백을 넣으십시오.
  • "function", 일부 공백, 원하는 전체 함수 이름을 누를 때까지 다음 줄의 공백이나 단어 문자를 가져옵니다.

실제로 "문제가 발생하면"정규식을 사용할 것입니다. "라고 생각하는 사람들이 있습니다. 이제는 두 가지 문제가 있습니다."

+0

클래스에 댓글이있을 때 실제로는 작동하지 않습니다. 이처럼 : * /' '클래스 Adminusers '/ ** CMS 사용자 관리는 {' '이}' 가 그래서 필요한 기능 이름 클래스 내용의 처음부터 텍스트를 반환 모듈을 확장합니다. 하지만 난 그냥 함수의 의견이 필요 :) – mennanov

관련 문제