/** * Creates a new instance of this class or one of the specialized sub-classes. * * @todo replace the switch statement with an intelligent container / plugin system. * * @param string $namespace Namespace where this tag occurs. * @param string[] $namespace_aliases aliases used for all namespaces at the location of this tag. * @param SimpleXMLElement $xml root xml element for this tag. * @param DocBlox_Reflection_DocBlock_Tag $tag The actual tag as reflected. * * @return DocBlox_Parser_DocBlock_Tag_Definition */ public static function create($namespace, $namespace_aliases, SimpleXMLElement $xml, DocBlox_Reflection_DocBlock_Tag $tag) { switch ($tag->getName()) { case 'param': $def = new DocBlox_Parser_DocBlock_Tag_Definition_Param($namespace, $namespace_aliases, $xml, $tag); break; case 'link': $def = new DocBlox_Parser_DocBlock_Tag_Definition_Link($namespace, $namespace_aliases, $xml, $tag); break; default: $def = new self($namespace, $namespace_aliases, $xml, $tag); break; } $def->configure(); return $def; }
/** * Creates a new instance of this class or one of the specialized sub-classes. * * @param string $namespace Namespace where * this tag occurs. * @param string[] $namespace_aliases Aliases used * for all namespaces at the location of this tag. * @param SimpleXMLElement $xml Root xml element * for this tag. * @param DocBlox_Reflection_DocBlock_Tag $tag The actual tag * as reflected. * * @todo replace the switch statement with an intelligent container / * plugin system. * * @return DocBlox_Parser_DocBlock_Tag_Definition */ public static function create($namespace, $namespace_aliases, SimpleXMLElement $xml, DocBlox_Reflection_DocBlock_Tag $tag) { $tag_name = $tag->getName(); // check whether the tag name is namespaced and replace alias with full // name to get the FQCN form if (strpos($tag_name, '\\') !== false) { $tag_name = explode('\\', $tag_name); if (count($tag_name) > 1 && isset($namespace_aliases[$tag_name[0]])) { $tag_name[0] = $namespace_aliases[$tag_name[0]]; } $tag_name = implode('\\', $tag_name); if ($tag_name[0] != '\\') { $tag_name = '\\' . $tag_name; } } $tag_name = strtolower($tag_name); switch ($tag_name) { case 'property-write': case 'property-read': case 'property': case 'param': $def = new DocBlox_Parser_DocBlock_Tag_Definition_Param($namespace, $namespace_aliases, $xml, $tag); break; case 'see': $def = new DocBlox_Parser_DocBlock_Tag_Definition_See($namespace, $namespace_aliases, $xml, $tag); break; case 'method': $def = new DocBlox_Parser_DocBlock_Tag_Definition_Method($namespace, $namespace_aliases, $xml, $tag); break; case 'uses': $def = new DocBlox_Parser_DocBlock_Tag_Definition_Uses($namespace, $namespace_aliases, $xml, $tag); break; case 'link': $def = new DocBlox_Parser_DocBlock_Tag_Definition_Link($namespace, $namespace_aliases, $xml, $tag); break; case '\\doctrine\\orm\\mapping\\column': case '\\doctrine\\orm\\mapping\\changetrackingpolicy': case '\\doctrine\\orm\\mapping\\discriminatorcolumn': case '\\doctrine\\orm\\mapping\\discriminatormap': case '\\doctrine\\orm\\mapping\\entity': case '\\doctrine\\orm\\mapping\\generatedvalue': case '\\doctrine\\orm\\mapping\\haslifecyclecallbacks': case '\\doctrine\\orm\\mapping\\id': case '\\doctrine\\orm\\mapping\\inheritancetype': case '\\doctrine\\orm\\mapping\\joincolumn': case '\\doctrine\\orm\\mapping\\jointable': case '\\doctrine\\orm\\mapping\\manytoone': case '\\doctrine\\orm\\mapping\\manytomany': case '\\doctrine\\orm\\mapping\\mappedsuperclass': case '\\doctrine\\orm\\mapping\\onetoone': case '\\doctrine\\orm\\mapping\\onetomany': case '\\doctrine\\orm\\mapping\\orderby': case '\\doctrine\\orm\\mapping\\postload': case '\\doctrine\\orm\\mapping\\postpersist': case '\\doctrine\\orm\\mapping\\postremove': case '\\doctrine\\orm\\mapping\\postupdate': case '\\doctrine\\orm\\mapping\\prepersist': case '\\doctrine\\orm\\mapping\\preremove': case '\\doctrine\\orm\\mapping\\preupdate': case '\\doctrine\\orm\\mapping\\sequencegenerator': case '\\doctrine\\orm\\mapping\\table': case '\\doctrine\\orm\\mapping\\uniqueconstraint': case '\\doctrine\\orm\\mapping\\version': case 'column': case 'changetrackingpolicy': case 'discriminatorcolumn': case 'discriminatormap': case 'entity': case 'generatedvalue': case 'haslifecyclecallbacks': case 'id': case 'inheritancetype': case 'joincolumn': case 'jointable': case 'manytoone': case 'manytomany': case 'mappedsuperclass': case 'onetoone': case 'onetomany': case 'orderby': case 'postload': case 'postpersist': case 'postremove': case 'postupdate': case 'prepersist': case 'preremove': case 'preupdate': case 'sequencegenerator': case 'table': case 'uniqueconstraint': case 'version': $def = new DocBlox_Parser_DocBlock_Tag_Definition_Doctrine($namespace, $namespace_aliases, $xml, $tag); break; default: $def = new self($namespace, $namespace_aliases, $xml, $tag); break; } $def->configure(); return $def; }