Skip to content

Instantly share code, notes, and snippets.

@akluth
Last active August 29, 2015 13:58
Show Gist options
  • Save akluth/10366990 to your computer and use it in GitHub Desktop.
Save akluth/10366990 to your computer and use it in GitHub Desktop.
Minimal annotation parser
<?php
/**
* Minimal and very simple annotation parser.
*/
class AnnotationParser
{
static $ANNOTATION_NAME = 1;
static $ANNOTATION_VALUE = 2;
static private $reflector;
static public function parseMethod($class, $method)
{
self::$reflector = new \ReflectionMethod($class, $method);
return self::parseAnnotation(self::$reflector->getDocComment());
}
static public function parseClass($class)
{
self::$reflector = new \ReflectionClass($class);
$parsedData = [];
foreach (self::$reflector->getMethods() as $method) {
$parsedData[$method->getName()] = self::parseAnnotation($method->getDocComment());
}
return $parsedData;
}
static private function parseAnnotation($docBlock)
{
if (!$docBlock) {
return null;
}
$rawAnnotations = $annotationTokens = $parsedAnnotations = [];
if (!preg_match_all('/@(.*)/', $docBlock, $rawAnnotations)) {
return null;
}
foreach ($rawAnnotations[1] as $annotation) {
preg_match('/\\\\([\w]+)\{"([\/a-zA-Z\-]+)"}/', $annotation, $annotationTokens);
$parsedAnnotations[$annotationTokens[self::$ANNOTATION_NAME]] = $annotationTokens[self::$ANNOTATION_VALUE];
}
return $parsedAnnotations;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment