X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=framework%2Floader%2Fclass_ClassLoader.php;h=211aded9b438cf368bb4a67a3103ea62f265bc62;hp=939d3559db61dc439ffdd572eb669278849ee228;hb=146c8b3c929a1b0ab17d6605e5ae949ac44899c1;hpb=d5dc929cca6a35725ff7af3446e2764e6c739d81 diff --git a/framework/loader/class_ClassLoader.php b/framework/loader/class_ClassLoader.php index 939d3559..211aded9 100644 --- a/framework/loader/class_ClassLoader.php +++ b/framework/loader/class_ClassLoader.php @@ -3,8 +3,8 @@ namespace CoreFramework\Loader; // Import framework stuff +use CoreFramework\Bootstrap\FrameworkBootstrap; use CoreFramework\Configuration\FrameworkConfiguration; -use CoreFramework\Object\BaseFrameworkSystem; // Import SPL stuff use \InvalidArgumentException; @@ -85,19 +85,19 @@ class ClassLoader { private $ignoreList = array(); /** - * Debug this class loader? (TRUE = yes, FALSE = no) + * Debug this class loader? (true = yes, false = no) */ - private $debug = FALSE; + private $debug = false; /** * Whether the file list is cached */ - private $listCached = FALSE; + private $listCached = false; /** * Wethe class content has been cached */ - private $classesCached = FALSE; + private $classesCached = false; /** * Filename for the list cache @@ -117,7 +117,7 @@ class ClassLoader { /** * By default the class loader is strict with naming-convention check */ - private static $strictNamingConventionCheck = TRUE; + private static $strictNamingConventionCheck = true; /** * Framework/application paths for classes, etc. @@ -157,14 +157,14 @@ class ClassLoader { } // END - if // Skip here if already cached - if ($this->listCached === FALSE) { + if ($this->listCached === false) { // Writes the cache file of our list away $cacheContent = json_encode($this->foundClasses); file_put_contents($this->listCacheFQFN, $cacheContent); } // END - if // Skip here if already cached - if ($this->classesCached === FALSE) { + if ($this->classesCached === false) { // Generate a full-cache of all classes $cacheContent = ''; foreach (array_keys($this->loadedClasses) as $fqfn) { @@ -224,7 +224,7 @@ class ClassLoader { // Debug message //* NOISY-DEBUG: */ printf('[%s:%d]: pathName=%s' . PHP_EOL, __METHOD__, __LINE__, $pathName); - // Is it not FALSE and accessible? + // Is it not false and accessible? if (is_bool($pathName)) { // Skip this continue; @@ -265,7 +265,7 @@ class ClassLoader { $pathName = realpath(sprintf( '%s/%s/%s', $cfg->getConfigEntry('application_base_path'), - $cfg->getConfigEntry('app_name'), + $cfg->getConfigEntry('detected_app_name'), $shortPath )); @@ -300,18 +300,24 @@ class ClassLoader { // Debug message //* NOISY-DEBUG: */ printf('[%s:%d]: shortPath=%s' . PHP_EOL, __METHOD__, __LINE__, $shortPath); - // Create path name - $pathName = realpath(sprintf( + // Construct path name + $pathName = sprintf( '%s/%s', - $cfg->getConfigEntry('framework_base_path'), + $cfg->getConfigEntry('root_base_path'), $shortPath - )); + ); // Debug message - //* NOISY-DEBUG: */ printf('[%s:%d]: pathName[%s]=%s' . PHP_EOL, __METHOD__, __LINE__, gettype($pathName), $pathName); + //* NOISY-DEBUG: */ printf('[%s:%d]: pathName[%s]=%s - BEFORE!' . PHP_EOL, __METHOD__, __LINE__, gettype($pathName), $pathName); + + // Try to find it + $pathName = realpath($pathName); + + // Debug message + //* NOISY-DEBUG: */ printf('[%s:%d]: pathName[%s]=%s - AFTER!' . PHP_EOL, __METHOD__, __LINE__, gettype($pathName), $pathName); // Is the path readable? - if (is_dir($pathName)) { + if ((is_dir($pathName)) && (is_readable($pathName))) { // Try to load the application classes ClassLoader::getSelfInstance()->scanClassPath($pathName); } // END - if @@ -327,7 +333,7 @@ class ClassLoader { * @param $strictNamingConventionCheck Whether to strictly check naming-convention * @return void */ - public static function enableStrictNamingConventionCheck ($strictNamingConventionCheck = TRUE) { + public static function enableStrictNamingConventionCheck ($strictNamingConventionCheck = true) { self::$strictNamingConventionCheck = $strictNamingConventionCheck; } @@ -339,8 +345,14 @@ class ClassLoader { * @return void */ public static function registerTestsPath ($relativePath) { + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: relativePath=%s - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $relativePath); + // "Register" it self::$testPaths[$relativePath] = $relativePath; + + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: EXIT!' . PHP_EOL, __METHOD__, __LINE__); } /** @@ -350,8 +362,14 @@ class ClassLoader { * @return void */ public static function autoLoad ($className) { + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: className=%s - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $className); + // Try to include this class self::getSelfInstance()->loadClassFile($className); + + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: EXIT!' . PHP_EOL, __METHOD__, __LINE__); } /** @@ -379,7 +397,7 @@ class ClassLoader { */ public function scanClassPath ($basePath, array $ignoreList = array() ) { // Is a list has been restored from cache, don't read it again - if ($this->listCached === TRUE) { + if ($this->listCached === true) { // Abort here return; } // END - if @@ -400,8 +418,8 @@ class ClassLoader { */ $basePath2 = realpath($basePath); - // If the basePath is FALSE it is invalid - if ($basePath2 === FALSE) { + // If the basePath is false it is invalid + if ($basePath2 === false) { /* @TODO: Do not exit here. */ exit(__METHOD__ . ': Cannot read ' . $basePath . ' !' . PHP_EOL); } else { @@ -451,31 +469,6 @@ class ClassLoader { } // END - while } - /** - * Load extra config files - * - * @return void - */ - public function loadExtraConfigs () { - // Backup old prefix - $oldPrefix = $this->prefix; - - // Set new prefix (temporary!) - $this->prefix = 'config-'; - - // Set base directory - $basePath = $this->configInstance->getConfigEntry('framework_base_path') . 'config/'; - - // Load all classes from the config directory - $this->scanClassPath($basePath); - - // Include these extra configs now - $this->includeExtraConfigs(); - - // Set back the old prefix - $this->prefix = $oldPrefix; - } - /** * Initializes our loader class * @@ -488,8 +481,8 @@ class ClassLoader { // Construct the FQFN for the cache if (!defined('DEVELOPER')) { - $this->listCacheFQFN = $this->configInstance->getConfigEntry('local_database_path') . 'list-' . $this->configInstance->getConfigEntry('app_name') . '.cache'; - $this->classCacheFQFN = $this->configInstance->getConfigEntry('local_database_path') . 'class-' . $this->configInstance->getConfigEntry('app_name') . '.cache'; + $this->listCacheFQFN = $this->configInstance->getConfigEntry('local_database_path') . 'list-' . $this->configInstance->getConfigEntry('detected_app_name') . '.cache'; + $this->classCacheFQFN = $this->configInstance->getConfigEntry('local_database_path') . 'class-' . $this->configInstance->getConfigEntry('detected_app_name') . '.cache'; } // END - if // Set suffix and prefix from configuration @@ -505,7 +498,7 @@ class ClassLoader { } // END - if // IS the cache there? - if (BaseFrameworkSystem::isReadableFile($this->listCacheFQFN)) { + if (FrameworkBootstrap::isReadableFile($this->listCacheFQFN)) { // Get content $cacheContent = file_get_contents($this->listCacheFQFN); @@ -513,16 +506,16 @@ class ClassLoader { $this->foundClasses = json_decode($cacheContent); // List has been restored from cache! - $this->listCached = TRUE; + $this->listCached = true; } // END - if // Does the class cache exist? - if (BaseFrameworkSystem::isReadableFile($this->listCacheFQFN)) { + if (FrameworkBootstrap::isReadableFile($this->listCacheFQFN)) { // Then include it - require $this->classCacheFQFN; + FrameworkBootstrap::loadInclude($this->classCacheFQFN); // Mark the class cache as loaded - $this->classesCached = TRUE; + $this->classesCached = true; } // END - if } @@ -543,7 +536,7 @@ class ClassLoader { $classNameParts = explode("\\", $className); // At least 3 parts should be there - if ((self::$strictNamingConventionCheck === TRUE) && (count($classNameParts) < 3)) { + if ((self::$strictNamingConventionCheck === true) && (count($classNameParts) < 3)) { // Namespace scheme is: Project\Package[\SubPackage...] throw new InvalidArgumentException(sprintf('Class name "%s" is not conform to naming-convention: Project\Package[\SubPackage...]\SomeFooBar', $className)); } // END - if @@ -559,14 +552,14 @@ class ClassLoader { if ((isset($this->foundClasses[$fileName])) && (!isset($this->loadedClasses[$this->foundClasses[$fileName]]))) { // File is found and not loaded so load it only once //* NOISY-DEBUG: */ printf('[%s:%d] LOAD: %s - START' . PHP_EOL, __METHOD__, __LINE__, $fileName); - require $this->foundClasses[$fileName]; + FrameworkBootstrap::loadInclude($this->foundClasses[$fileName]); //* NOISY-DEBUG: */ printf('[%s:%d] LOAD: %s - END' . PHP_EOL, __METHOD__, __LINE__, $fileName); // Count this loaded class/interface/exception $this->total++; // Mark this class as loaded for other purposes than loading it. - $this->loadedClasses[$this->foundClasses[$fileName]] = TRUE; + $this->loadedClasses[$this->foundClasses[$fileName]] = true; // Remove it from classes list so it won't be found twice. //* NOISY-DEBUG: */ printf('[%s:%d] UNSET: %s' . PHP_EOL, __METHOD__, __LINE__, $fileName); @@ -575,8 +568,8 @@ class ClassLoader { // Developer mode excludes caching (better debugging) if (!defined('DEVELOPER')) { // Reset cache - //* NOISY-DEBUG: */ printf('[%s:%d] classesCached=FALSE' . PHP_EOL, __METHOD__, __LINE__); - $this->classesCached = FALSE; + //* NOISY-DEBUG: */ printf('[%s:%d] classesCached=false' . PHP_EOL, __METHOD__, __LINE__); + $this->classesCached = false; } // END - if } else { // Not found @@ -584,28 +577,6 @@ class ClassLoader { } } - /** - * Includes all extra config files - * - * @return void - */ - private function includeExtraConfigs () { - // Run through all class names (should not be much) - foreach ($this->foundClasses as $fileName => $fqfn) { - // Is this a config? - if (substr($fileName, 0, strlen($this->prefix)) == $this->prefix) { - // Then include it - //* NOISY-DEBUG: */ printf('[%s:%d] LOAD: %s - START' . PHP_EOL, __METHOD__, __LINE__, $fileName); - require $fqfn; - //* NOISY-DEBUG: */ printf('[%s:%d] LOAD: %s - END' . PHP_EOL, __METHOD__, __LINE__, $fileName); - - // Remove it from the list - //* NOISY-DEBUG: */ printf('[%s:%d] UNSET: %s' . PHP_EOL, __METHOD__, __LINE__, $fileName); - unset($this->foundClasses[$fileName]); - } // END - if - } // END - foreach - } - /** * Getter for total include counter *