Symfony\Component\ClassLoader\ClassCollectionLoader::load PHP Method

load() public static method

Loads a list of classes and caches them in one big file.
public static load ( array $classes, string $cacheDir, string $name, boolean $autoReload, boolean $adaptive = false, string $extension = '.php' )
$classes array An array of classes to load
$cacheDir string A cache directory
$name string The cache name prefix
$autoReload boolean Whether to flush the cache when the cache is stale or not
$adaptive boolean Whether to remove already declared classes or not
$extension string File extension of the resulting file
    public static function load($classes, $cacheDir, $name, $autoReload, $adaptive = false, $extension = '.php')
    {
        // each $name can only be loaded once per PHP process
        if (isset(self::$loaded[$name])) {
            return;
        }
        self::$loaded[$name] = true;
        if ($adaptive) {
            $declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits());
            // don't include already declared classes
            $classes = array_diff($classes, $declared);
            // the cache is different depending on which classes are already declared
            $name = $name . '-' . substr(hash('sha256', implode('|', $classes)), 0, 5);
        }
        $classes = array_unique($classes);
        // cache the core classes
        if (!is_dir($cacheDir) && !@mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) {
            throw new \RuntimeException(sprintf('Class Collection Loader was not able to create directory "%s"', $cacheDir));
        }
        $cacheDir = rtrim(realpath($cacheDir) ?: $cacheDir, '/' . DIRECTORY_SEPARATOR);
        $cache = $cacheDir . '/' . $name . $extension;
        // auto-reload
        $reload = false;
        if ($autoReload) {
            $metadata = $cache . '.meta';
            if (!is_file($metadata) || !is_file($cache)) {
                $reload = true;
            } else {
                $time = filemtime($cache);
                $meta = unserialize(file_get_contents($metadata));
                sort($meta[1]);
                sort($classes);
                if ($meta[1] != $classes) {
                    $reload = true;
                } else {
                    foreach ($meta[0] as $resource) {
                        if (!is_file($resource) || filemtime($resource) > $time) {
                            $reload = true;
                            break;
                        }
                    }
                }
            }
        }
        if (!$reload && file_exists($cache)) {
            require_once $cache;
            return;
        }
        if (!$adaptive) {
            $declared = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits());
        }
        $files = self::inline($classes, $cache, $declared);
        if ($autoReload) {
            // save the resources
            self::writeCacheFile($metadata, serialize(array(array_values($files), $classes)));
        }
    }

Usage Example

 /**
  * @param string $cacheDir
  */
 public function warmUp($cacheDir)
 {
     $mapFile = $cacheDir . '/classes.map';
     if (is_file($mapFile)) {
         ClassCollectionLoader::load(include $mapFile, $cacheDir, 'classes', $this->kernel->isDebug(), false, '.php');
     }
 }
All Usage Examples Of Symfony\Component\ClassLoader\ClassCollectionLoader::load