コード例 #1
0
ファイル: CommandManager.php プロジェクト: NicolasSchmutz/cm
 public function autoloadCommands()
 {
     $classes = CM_Util::getClassChildren('CM_Cli_Runnable_Abstract', false);
     foreach ($classes as $className) {
         $this->addRunnable($className);
     }
 }
コード例 #2
0
ファイル: Cluster.php プロジェクト: NicolasSchmutz/cm
 /**
  * @return CM_Elasticsearch_Type_Abstract[]
  */
 public function getTypes()
 {
     $types = CM_Util::getClassChildren('CM_Elasticsearch_Type_Abstract');
     return \Functional\map($types, function ($className) {
         return new $className($this->getRandomClient());
     });
 }
コード例 #3
0
ファイル: Cli.php プロジェクト: cargomedia/cm
 public function clear()
 {
     $this->_getStreamOutput()->writeln('Clearing cache…');
     $classes = CM_Util::getClassChildren('CM_Cache_Storage_Abstract', false);
     foreach ($classes as $className) {
         $this->_getStreamOutput()->writeln('  ' . $className);
         /** @var CM_Cache_Storage_Abstract $cache */
         $cache = new $className();
         $cache->flush();
     }
     $this->_getStreamOutput()->writeln('Cache cleared.');
 }
コード例 #4
0
ファイル: Abstract.php プロジェクト: NicolasSchmutz/cm
 /**
  * @param boolean|null $includeAbstracts
  * @return string[]
  */
 public static function getClassChildren($includeAbstracts = null)
 {
     $className = get_called_class();
     return CM_Util::getClassChildren($className, $includeAbstracts);
 }
コード例 #5
0
ファイル: Generator.php プロジェクト: NicolasSchmutz/cm
 public function generateClassTypes()
 {
     $config = CM_Config::get();
     if (isset(CM_Config::get()->CM_Class_Abstract->typesMaxValue)) {
         $this->_typesMaxValue = CM_Config::get()->CM_Class_Abstract->typesMaxValue;
     }
     $typedClasses = CM_Util::getClassChildren('CM_Typed', true);
     /** @var CM_Class_Abstract[]|string[] $namespaceClassList */
     $namespaceClassList = array();
     // fetch type-namespaces
     foreach ($typedClasses as $class) {
         if (!is_subclass_of(get_parent_class($class), 'CM_Typed')) {
             $namespaceClassList[] = $class;
         }
     }
     // fetch current types
     foreach ($namespaceClassList as $namespaceClass) {
         if (isset($config->{$namespaceClass}->types)) {
             foreach ($config->{$namespaceClass}->types as $type => $class) {
                 if ($classNameDuplicate = array_search($type, $this->_classTypes)) {
                     throw new CM_Exception_Invalid('Duplicate `TYPE` constant for `' . $class . '` and `' . $classNameDuplicate . '`. Both equal `' . $type . '`.');
                 }
                 if (class_exists($class)) {
                     $this->_classTypes[$type] = $class;
                 } else {
                     $this->_classTypesRemoved[] = $class;
                 }
             }
         }
     }
     // generate new types
     foreach ($namespaceClassList as $namespaceClass) {
         $this->_namespaceTypes[$namespaceClass] = array();
         $containedClasses = $namespaceClass::getClassChildren();
         $reflectionClass = new ReflectionClass($namespaceClass);
         if (!$reflectionClass->isAbstract()) {
             array_unshift($containedClasses, $namespaceClass);
         }
         foreach ($containedClasses as $class) {
             if (false === ($type = array_search($class, $this->_classTypes))) {
                 $type = ++$this->_typesMaxValue;
                 $this->_classTypes[$type] = $class;
                 $this->_classTypesAdded[$type] = $class;
             }
             $this->_namespaceTypes[$namespaceClass][$type] = $class;
         }
     }
 }