/** * @return ReflectionMethodMagic[]|array */ public function extractFromClass(ReflectionClass $reflectionClass) { $methods = []; if ($parentClass = $reflectionClass->getParentClass()) { $methods += $this->extractFromParentClass($parentClass, $reflectionClass->isDocumented()); } if ($traits = $reflectionClass->getTraits()) { $methods += $this->extractFromTraits($traits, $reflectionClass->isDocumented()); } return $methods; }
/** * @return array {[ declaringTraitName => ReflectionPropertyMagic[] ]} */ public function getUsedMagicProperties() { $properties = []; $allProperties = array_flip(array_map(function (ReflectionProperty $property) { return $property->getName(); }, $this->getOwnMagicProperties())); foreach ($this->reflectionClass->getTraits() as $trait) { if (!$trait instanceof ReflectionClass) { continue; } $usedProperties = $this->getUsedElements($trait->getOwnMagicProperties(), $allProperties); $properties = $this->sortElements($usedProperties, $properties, $trait); } return $properties; }
/** * @return array {[ traitName => ReflectionProperty[] ]} */ public function getUsedProperties() { $allProperties = array_flip(array_map(function (ReflectionProperty $property) { return $property->getName(); }, $this->reflectionClass->getOwnProperties())); $properties = []; foreach ($this->reflectionClass->getTraits() as $trait) { if (!$trait instanceof ReflectionClass) { continue; } $usedProperties = []; foreach ($trait->getOwnProperties() as $property) { if (!array_key_exists($property->getName(), $allProperties)) { $usedProperties[$property->getName()] = $property; $allProperties[$property->getName()] = NULL; } } if (!empty($usedProperties)) { ksort($usedProperties); $properties[$trait->getName()] = array_values($usedProperties); } } return $properties; }