/** * {@inheritDoc} */ public function getParentClass() { if (!isset($this->parentClass)) { static $extendsField = 'extends'; $parentClass = false; $hasExtends = in_array($extendsField, $this->classLikeNode->getSubNodeNames()); $extendsNode = $hasExtends ? $this->classLikeNode->{$extendsField} : null; if ($extendsNode instanceof FullyQualified) { $extendsName = $extendsNode->toString(); $parentClass = class_exists($extendsName, false) ? new parent($extendsName) : new static($extendsName); } $this->parentClass = $parentClass; } return $this->parentClass; }
/** * Parses interfaces from the concrete class node * * @param ClassLike $classLikeNode Class-like node * * @return array|\ReflectionClass[] List of reflections of interfaces */ public static function collectInterfacesFromClassNode(ClassLike $classLikeNode) { $interfaces = []; $isInterface = $classLikeNode instanceof Interface_; $interfaceField = $isInterface ? 'extends' : 'implements'; $hasInterfaces = in_array($interfaceField, $classLikeNode->getSubNodeNames()); $implementsList = $hasInterfaces ? $classLikeNode->{$interfaceField} : array(); if ($implementsList) { foreach ($implementsList as $implementNode) { if ($implementNode instanceof FullyQualified) { $implementName = $implementNode->toString(); $interface = interface_exists($implementName, false) ? new parent($implementName) : new static($implementName); $interfaces[$implementName] = $interface; } } } return $interfaces; }