X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=framework%2Floader%2Fclass_ClassLoader.php;h=63f6d00d280c83ba0fee3277b74321c7a814ab64;hp=9f78f969e5290aac1190fbbd873c367b22b08c17;hb=b9bfbe86c031c9d83c3670602906df191a33ba2a;hpb=5da8f717122568335b8a8ab230fa0de17e983fab diff --git a/framework/loader/class_ClassLoader.php b/framework/loader/class_ClassLoader.php index 9f78f969..63f6d00d 100644 --- a/framework/loader/class_ClassLoader.php +++ b/framework/loader/class_ClassLoader.php @@ -10,6 +10,7 @@ use CoreFramework\Configuration\FrameworkConfiguration; use \InvalidArgumentException; use \RecursiveDirectoryIterator; use \RecursiveIteratorIterator; +use \SplFileInfo; /** * This class loads class include files with a specific prefix and suffix @@ -100,14 +101,14 @@ class ClassLoader { private $classesCached = false; /** - * Filename for the list cache + * SplFileInfo for the list cache */ - private $listCacheFQFN = ''; + private $listCacheFile = NULL; /** - * Cache for class content + * SplFileInfo for class content */ - private $classCacheFQFN = ''; + private $classCacheFile = NULL; /** * Counter for loaded include files @@ -160,20 +161,32 @@ class ClassLoader { if ($this->listCached === false) { // Writes the cache file of our list away $cacheContent = json_encode($this->foundClasses); - file_put_contents($this->listCacheFQFN, $cacheContent); + + // Open cache instance + $fileObject = $this->listCacheFile->openFile('w'); + + // And write whole list + $fileObject->fwrite($cacheContent); } // END - if // Skip here if already cached if ($this->classesCached === false) { // Generate a full-cache of all classes $cacheContent = ''; - foreach (array_keys($this->loadedClasses) as $fqfn) { + foreach (array_keys($this->loadedClasses) as $fileInstance) { + // Open file + $fileObject = $fileInstance->openFile('r'); + // Load the file - $cacheContent .= file_get_contents($fqfn); + // @TODO Add some uglifying code (compress) here + $cacheContent .= $fileObject->fread($fileInstance->getSize()); } // END - foreach + // Open file + $fileObject = $this->classCacheFile->openFile('w'); + // And write it away - file_put_contents($this->classCacheFQFN, $cacheContent); + $fileObject->fwrite($cacheContent); } // END - if } @@ -444,11 +457,8 @@ class ClassLoader { // Get filename from iterator which is the class' name (according naming-convention) $fileName = $currentEntry->getFileName(); - // Get the "FQFN" (path and file name) - $fqfn = $currentEntry->getRealPath(); - // Current entry must be a file, not smaller than 100 bytes and not on ignore list - if ((!$currentEntry->isFile()) || (in_array($fileName, $this->ignoreList)) || (filesize($fqfn) < 100)) { + if ((!$currentEntry->isFile()) || (in_array($fileName, $this->ignoreList)) || ($currentEntry->getSize() < 100)) { // Advance to next entry $iteratorInstance->next(); @@ -461,11 +471,11 @@ class ClassLoader { //* NOISY-DEBUG: */ printf('[%s:%d] FOUND: %s' . PHP_EOL, __METHOD__, __LINE__, $fileName); if ((substr($fileName, 0, strlen($this->prefix)) == $this->prefix) && (substr($fileName, -strlen($this->suffix), strlen($this->suffix)) == $this->suffix)) { // Add it to the list - //* NOISY-DEBUG: */ printf('[%s:%d] ADD: %s,fqfn=%s' . PHP_EOL, __METHOD__, __LINE__, $fileName, $fqfn); - $this->foundClasses[$fileName] = $fqfn; + //* NOISY-DEBUG: */ printf('[%s:%d] ADD: %s,currentEntry=%s' . PHP_EOL, __METHOD__, __LINE__, $fileName, $currentEntry); + $this->foundClasses[$fileName] = $currentEntry; } else { // Not added - //* NOISY-DEBUG: */ printf('[%s:%d] NOT ADDED: %s,fqfn=%s' . PHP_EOL, __METHOD__, __LINE__, $fileName, $fqfn); + //* NOISY-DEBUG: */ printf('[%s:%d] NOT ADDED: %s,currentEntry=%s' . PHP_EOL, __METHOD__, __LINE__, $fileName, $currentEntry); } // Advance to next entry @@ -486,8 +496,8 @@ class ClassLoader { // Construct the FQFN for the cache if (!defined('DEVELOPER')) { - $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'; + $this->listCacheFile = new SplFileInfo($this->configInstance->getConfigEntry('local_database_path') . 'list-' . $this->configInstance->getConfigEntry('detected_app_name') . '.cache'); + $this->classCacheFile = new SplFileInfo($this->configInstance->getConfigEntry('local_database_path') . 'class-' . $this->configInstance->getConfigEntry('detected_app_name') . '.cache'); } // END - if // Set suffix and prefix from configuration @@ -502,19 +512,19 @@ class ClassLoader { return; } // END - if - // IS the cache there? - if (FrameworkBootstrap::isReadableFile($this->listCacheFQFN)) { + // Is the cache there? + if (FrameworkBootstrap::isReadableFile($this->listCacheFile)) { // Load and convert it - $this->foundClasses = json_decode(file_get_contents($this->listCacheFQFN)); + $this->foundClasses = json_decode(file_get_contents($this->listCacheFile->getPathname())); // List has been restored from cache! $this->listCached = true; } // END - if // Does the class cache exist? - if (FrameworkBootstrap::isReadableFile($this->listCacheFQFN)) { + if (FrameworkBootstrap::isReadableFile($this->classCacheFile)) { // Then include it - FrameworkBootstrap::loadInclude($this->classCacheFQFN); + FrameworkBootstrap::loadInclude($this->classCacheFile); // Mark the class cache as loaded $this->classesCached = true; @@ -547,11 +557,11 @@ class ClassLoader { $shortClassName = array_pop($classNameParts); // Create a name with prefix and suffix - $fileName = $this->prefix . $shortClassName . $this->suffix; + $fileName = sprintf('%s%s%s', $this->prefix, $shortClassName, $this->suffix); // Now look it up in our index //* NOISY-DEBUG: */ printf('[%s:%d] ISSET: %s' . PHP_EOL, __METHOD__, __LINE__, $fileName); - if ((isset($this->foundClasses[$fileName])) && (!isset($this->loadedClasses[$this->foundClasses[$fileName]]))) { + if ((isset($this->foundClasses[$fileName])) && (!isset($this->loadedClasses[$this->foundClasses[$fileName]->getPathname()]))) { // File is found and not loaded so load it only once //* NOISY-DEBUG: */ printf('[%s:%d] LOAD: %s - START' . PHP_EOL, __METHOD__, __LINE__, $fileName); FrameworkBootstrap::loadInclude($this->foundClasses[$fileName]); @@ -561,7 +571,7 @@ class ClassLoader { $this->total++; // Mark this class as loaded for other purposes than loading it. - $this->loadedClasses[$this->foundClasses[$fileName]] = true; + $this->loadedClasses[$this->foundClasses[$fileName]->getPathname()] = 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);