Beispiel #1
0
 /**
  *
  * PRIVATE functions
  *
  */
 private function populateFactoryClassesArray()
 {
     $factoryFiles = glob(FinanCalc::getPath() . Config::getConfigField('factories_relative_path') . '/*.php');
     $factoriesNamespace = Config::getConfigField('factories_namespace');
     foreach ($factoryFiles as $factoryFile) {
         $factoryFileContents = file_get_contents($factoryFile);
         $fileTokens = token_get_all($factoryFileContents);
         $numTokens = count($fileTokens);
         for ($i = 2; $i < $numTokens; $i++) {
             if ($fileTokens[$i - 2][0] == T_CLASS) {
                 $factoryClassName = $fileTokens[$i][1];
                 try {
                     /** @noinspection PhpIncludeInspection */
                     require_once $factoryFile;
                     $factoryClassReflector = new ReflectionClass($factoriesNamespace . '\\' . $factoryClassName);
                 } catch (ReflectionException $e) {
                     error_log(ErrorMessages::getFactoryClassExpectedInNamespaceMessage($factoryClassName, $factoriesNamespace));
                     continue;
                 }
                 $factoryAbstractClass = 'FinanCalc\\Interfaces\\Calculator\\CalculatorFactoryAbstract';
                 if ($factoryClassReflector->isSubclassOf($factoryAbstractClass)) {
                     $this->factoryClasses[$factoryClassName] = $factoryClassReflector->newInstance();
                     break;
                 } else {
                     error_log(ErrorMessages::getFactoryClassExpectedAncestorMessage($factoryClassName, $factoryAbstractClass));
                 }
             }
         }
     }
 }