Reflection_Annotation in CVS Sebastian Bergmann
My Proposal for ””Reflection_Annotation”” has been accepted and I committed an initial development version to the PEAR CVS Repository.
ProposalにあったReflection_Annotationが6票で通りました。
CVSに上げ始めたらしいので気になっていたParser部分を見てみました。
class Reflection_Annotation_Parser {
public static function parseAnnotations($docComment) {
$annotations = array();
$lines = explode("\n", $docComment);
foreach ($lines as $line) {
$nameStart = strpos($line, '@');
if ($nameStart !== FALSE) {
$nameEnd = strpos($line, '(', $nameStart);
if ($nameEnd !== FALSE) {
$name = substr($line, $nameStart + 1, $nameEnd - $nameStart - 1);
}
$argumentsEnd = strpos($line, ')', $nameEnd);
if ($argumentsEnd !== FALSE) {
$arguments = substr($line, $nameEnd + 1, $argumentsEnd - ($nameEnd + 1));
$annotations[$name] = $arguments;
}
}
}
return $annotations;
}
}
なるほど、Parserと聞いただけで拒絶反応示してしまいたが、コメント部分をパースするだけならこんな感じなんですね。
Reflection_Annotationに親近感が沸きました。
ref: PHPにアノテーション