/** * Autoload a module class * * @param $class * @return mixed * False [if unable to load $class] * get_class($class) [if $class is successfully loaded] */ public function autoload($class) { if (false !== ($classLoaded = parent::autoload($class))) { return $classLoaded; } // Limit scope of this autoloader if (substr($class, -7) !== '\\Module') { return false; } $moduleName = substr($class, 0, -7); // transform CamelCase namespace to spinal-case, and try to load it // PHP does not execute autoloading for invalid namespaces $namespace = substr($moduleName, 0, $pos = strpos($moduleName, '\\')); $namespace = strtolower(preg_replace('/([^A-Z])([A-Z])/', '$1-$2', $namespace)); $class = $namespace . substr($moduleName, $pos) . '\\Module'; return parent::autoload($class); }
public function testReturnsFalseForNonModulePhar() { $loader = new ModuleAutoloader(); $loader->registerPath(__DIR__ . '/_files/'); $moduleClass = $loader->autoload('PharModuleFake\\Module'); $moduleClass = $loader->autoload('PharModuleNestedFake\\Module'); $this->assertFalse($moduleClass); }