/** * * 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)); } } } } }