/** * @param $abstractClass * @param $concreteClass */ public function validateConcrete($abstractClass, $concreteClass) { $reflection = new ReflectionClass($concreteClass); if (!$reflection->isSubclassOf($abstractClass) && $abstractClass != $reflection->getName()) { throw InvalidArgumentException::notSubclass($concreteClass, $abstractClass); } if ($reflection->isInterface() || $reflection->isAbstract()) { throw InvalidArgumentException::couldNotCreateConcreteInstance($concreteClass); } }
private function validateParameter(ReflectionClass $class, ReflectionParameter $parameter) { if (is_null($parameter->getClass())) { throw InvalidArgumentException::constructorContainsStaticParameter($class->getName(), $parameter->getName()); } if ($this->dependencyChain->contains($parameter->getClass()->getName())) { $this->dependencyChain->push($parameter->getClass()->getName()); throw InvalidArgumentException::dependencyChainContainsLoop($parameter->getName(), $class->getName(), $this->dependencyChain); } }