$dir = __DIR__ . '/cache/' . $package . '@' . $version; if (!is_dir($dir)) { mkdir($dir, 0777, true); } return $dir; } public static function pkg($packageStr) { preg_match('/(?P<ref>(?P<name>(?P<vendor>[A-Za-z]+)\\/(?P<package>[A-Za-z]+))@(?P<version>[0-9.]+))/', $packageStr, $match); return array_intersect_key($match, array_flip(['name', 'vendor', 'package', 'version', 'ref'])); } public static function ns($fqcn) { return substr($fqcn, 0, strrpos($fqcn, '\\')); } public static function cls($fqcn) { return substr($fqcn, strrpos($fqcn, '\\') + 1); } } $dependencies = new Dependencies(); // Init: $project = json_decode(file_get_contents(__DIR__ . '/../dependencies.json'), true); $dependencies->parseTree($project['require']); // Pass 1: $dependencies->createVersionedClasses(); // Pass 2: $dependencies->updateDependencyReferences(); // Autoload $dependencies->aliasRootPackages(); spl_autoload_register([$dependencies, 'autoload']);