Last active
February 8, 2019 20:40
-
-
Save kuzminT/80820b221d96171a3dfeccbc745763fc to your computer and use it in GitHub Desktop.
PSR-4 autoloader example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* An example of a project-specific implementation. | |
* | |
* After registering this autoload function with SPL, the following line | |
* would cause the function to attempt to load the \Foo\Bar\Baz\Qux class | |
* from /path/to/project/src/Baz/Qux.php: | |
* | |
* | |
* new \Foo\Bar\Baz\Qux; | |
* | |
* @param string $class The fully qualified class name. | |
* @return void | |
*/ | |
spl_autoload_register(function ($class) { | |
// project-specific namespace prefix | |
$prefix = 'Foo\\Bar\\'; | |
// base directory for the namespace prefix | |
$base_dir = __DIR__ . '/src/'; | |
// does the class use the namespace prefix? | |
$len = strlen($prefix); | |
if (strncmp($prefix, $class, $len) !== 0) { | |
// no, move to the next registered autoloader | |
return; | |
} | |
// get the relative class name | |
$relative_class = substr($class, $len); | |
// replace the namespace prefix with the base directory, replace namespace | |
// separators with directory separators in the relative class name, append | |
// with .php | |
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; | |
// if the file exists, require it | |
if (file_exists($file)) { | |
require $file; | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment