private static function getClassHierarchy(\ReflectionClass $class) {
if (isset(self::$seen[$class
->getName()])) {
return array();
}
self::$seen[$class
->getName()] = true;
$classes = array(
$class,
);
$parent = $class;
while (($parent = $parent
->getParentClass()) && $parent
->isUserDefined() && !isset(self::$seen[$parent
->getName()])) {
self::$seen[$parent
->getName()] = true;
array_unshift($classes, $parent);
}
$traits = array();
if (function_exists('get_declared_traits')) {
foreach ($classes as $c) {
foreach (self::resolveDependencies(self::computeTraitDeps($c), $c) as $trait) {
if ($trait !== $c) {
$traits[] = $trait;
}
}
}
}
return array_merge(self::getInterfaces($class), $traits, $classes);
}