<?php /** * PSR-4 compliant class autoloader * * @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md * @link https://www.php.net/manual/en/function.spl-autoload-register.php * @param string $class fully-qualified class name * @return void */ spl_autoload_register(function ($class) { // project-specific namespace prefix $prefix = ''; // base directory for the namespace prefix $base_dir = 'src/'; // normalize the base directory with a trailing separator $base_dir = rtrim($base_dir, DIRECTORY_SEPARATOR) . '/'; // 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; } });