public static function inspectClass(ReflectionClass $clazz) { /*Method[]*/ $methods = $clazz->getMethods(); /*ServiceDescriptor*/ $serviceDescriptor = new ServiceDescriptor($clazz); for ($i = 0, $max = count($methods); $i < $max; $i++) { /*MethodDescriptor*/ $descriptor = new MethodDescriptor(); $descriptor->setMethodName($methods[$i]->getName()); // /*Class*/ $returnType = $methods[ $i ].getReturnType(); $descriptor->setReturnType("Object"); /*ReflectionParameter[]*/ $args = $methods[$i]->getParameters(); for ($k = 0, $arglen = count($args); $k < $arglen; $k++) { /*ArgumentDescriptor*/ $argDesc = new ArgumentDescriptor(); $argDesc->setArgumentName("arg" . $k); $argDesc->setArgumentType($args[$k]->isArray() ? "Array of Object" : $args[$k]->getDeclaringClass()->getName()); $descriptor->addArgument($argDesc); } $serviceDescriptor->addMethod($descriptor); } return $serviceDescriptor; }
/** * @return Collection */ public function getMagicMethods() { /** @var Collection $methodTags */ $methodTags = clone $this->getTags()->get('method', new Collection()); $methods = new Collection(); /** @var Tag\MethodDescriptor $methodTag */ foreach ($methodTags as $methodTag) { $method = new MethodDescriptor(); $method->setName($methodTag->getMethodName()); $method->setDescription($methodTag->getDescription()); $method->setParent($this); $returnTags = $method->getTags()->get('return', new Collection()); $returnTags->add($methodTag->getResponse()); foreach ($methodTag->getArguments() as $name => $argument) { $method->addArgument($name, $argument); } $methods->add($method); } if ($this->getParent() instanceof static) { $methods = $methods->merge($this->getParent()->getMagicMethods()); } return $methods; }