Nette\DI\PhpReflection::getClassTree PHP Method

getClassTree() public static method

Returns class and all its descendants.
public static getClassTree ( ReflectionClass $class ) : string[]
$class ReflectionClass
return string[]
    public static function getClassTree(\ReflectionClass $class)
    {
        $addTraits = function ($types) use(&$addTraits) {
            if ($traits = array_merge(...array_map('class_uses', array_values($types)))) {
                $types += $traits + $addTraits($traits);
            }
            return $types;
        };
        $class = $class->getName();
        return array_values($addTraits([$class] + class_parents($class) + class_implements($class)));
    }

Usage Example

Esempio n. 1
0
 /**
  * Exports dependencies.
  * @return array
  */
 public function export()
 {
     $files = $phpFiles = $classes = $functions = [];
     foreach ($this->dependencies as $dep) {
         if (is_string($dep)) {
             $files[] = $dep;
         } elseif ($dep instanceof ReflectionClass) {
             if (empty($classes[$dep->getName()])) {
                 foreach (PhpReflection::getClassTree($dep) as $item) {
                     $phpFiles[] = (new ReflectionClass($item))->getFileName();
                     $classes[$item] = TRUE;
                 }
             }
         } elseif ($dep instanceof \ReflectionFunctionAbstract) {
             $phpFiles[] = $dep->getFileName();
             $functions[] = $dep instanceof ReflectionMethod ? $dep->getDeclaringClass()->getName() . '::' . $dep->getName() : $dep->getName();
         } else {
             throw new Nette\InvalidStateException('Unexpected dependency ' . gettype($dep));
         }
     }
     $classes = array_keys($classes);
     $functions = array_unique($functions, SORT_REGULAR);
     $hash = self::calculateHash($classes, $functions);
     $files = @array_map('filemtime', array_combine($files, $files));
     // @ - file may not exist
     $phpFiles = @array_map('filemtime', array_combine($phpFiles, $phpFiles));
     // @ - file may not exist
     return [self::VERSION, $files, $phpFiles, $classes, $functions, $hash];
 }