예제 #1
0
파일: Util.php 프로젝트: cargomedia/cm
 /**
  * @param string[] $paths
  * @throws CM_Exception_Invalid
  * @return array
  */
 public static function getClasses(array $paths)
 {
     $classes = array();
     foreach ($paths as $path) {
         $file = CM_File::factory($path);
         if (!$file instanceof CM_File_ClassInterface) {
             throw new CM_Exception_Invalid('Can only accept Class files. Given path is not one.', null, ['path' => $path]);
         }
         $meta = $file->getClassDeclaration();
         $classes[$meta['class']] = array('parent' => $meta['parent'], 'path' => $path);
     }
     $paths = array();
     while (count($classes)) {
         foreach ($classes as $class => $data) {
             if (!isset($classes[$data['parent']])) {
                 $paths[$data['path']] = $class;
                 unset($classes[$class]);
             }
         }
     }
     return $paths;
 }