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하지만 나는 결코 사용할 수 없기 때문에 나는 말할 수 없다.
이것은 doccomments가 아니라 주석입니다. 또한 귀하의 예는 이것이 발생한 곳의 상황을 지정하지 않습니다. 클래스, 함수 또는 단순한 파일. – Gordon
왜 이것을하고 싶습니까? 주석은 인간을위한 것이며, 이런 방식으로 사용하는 것은 반 직관적 인 것처럼 보입니다. –
@ 아담 포인터 :별로. 댓글은 많은 것들을 위해 사용될 수 있습니다 (PHPDocumentor와 PHPUnit을보십시오). 또한 자바에서는 실제로 컴파일러에 유용합니다 (예 : @exception 태그). – netcoder