2011-04-11 3 views
1

이 같은 배열을 감안할 때 :Reflection을 사용하여 배열 요소에서 DocComment를 검색 하시겠습니까?

array(
    /** I'm foo! */ 
    'foo' => 1, 

    /** I'm bar! */ 
    'bar' => 2, 
); 

는 배열 요소에 대한 DocComments를 검색 할 수 있습니까? 지금까지 내가 아는 한 Reflection API는 이에 대한 메커니즘을 제공하지 않습니다. 가능하다면 꽤 "창조적 인"해결책이 될 것입니다.

+1

이것은 doccomments가 아니라 주석입니다. 또한 귀하의 예는 이것이 발생한 곳의 상황을 지정하지 않습니다. 클래스, 함수 또는 단순한 파일. – Gordon

+0

왜 이것을하고 싶습니까? 주석은 인간을위한 것이며, 이런 방식으로 사용하는 것은 반 직관적 인 것처럼 보입니다. –

+0

@ 아담 포인터 :별로. 댓글은 많은 것들을 위해 사용될 수 있습니다 (PHPDocumentor와 PHPUnit을보십시오). 또한 자바에서는 실제로 컴파일러에 유용합니다 (예 : @exception 태그). – netcoder

답변

1

Reflection API는 자체적으로이 작업을 수행 할 수 없으며, 클래스가 아닌 경우에는 수행 할 수 없습니다. 예를 들어 다음 코드를 사용하십시오.

<?php 

$bar = array(
    /** I'm foo! */ 
    'foo' => 1, 

    /** I'm bar! */ 
    'bar' => 2, 
); 

Reflection API는 클래스가없고 기능이 없습니다. 이 인쇄됩니다

$code = file_get_contents('input.php'); 

$tokens = token_get_all($code); 
foreach ($tokens as $key => $token) { 
    if (is_array($token)) { 
     if ($token[0] == T_DOC_COMMENT) { 
      for ($i=$key+1; $i<count($tokens); $i++) { 
       if (is_array($tokens[$i]) && $tokens[$i][0] != T_WHITESPACE) { 
        echo $tokens[$i][2] . ' = '.$token[1].PHP_EOL; 
        break; 
       } 
      } 
     } /* T_DOC_COMMENT */ 
    } 
} 

: 당신은 아직도이 tokenizer를 사용하여 얻을 수

'foo' = /** I'm foo! */ 
'bar' = /** I'm bar! */ 

그러나, 이 아주 작은 예를에서 수행되는 것을 명심하십시오. PHP 파일 (클래스, 함수 등)을 모두 파싱하는 경우 을 입력하면 이 울퉁불퉁합니다.

결론적으로 이것은 가능하지만 많은 작업이 필요하며 오류가 발생하기 쉽습니다. 나는 그것을 추천하지 않을 것이다. 거기에 might be an actual PHP parser that exists하지만 나는 결코 사용할 수 없기 때문에 나는 말할 수 없다.

관련 문제