<?php
//custom autoload without composer
$to_map = [
'App' => 'app/',
'Core' => 'Core/',
];
foreach($to_map as $prefix => $base_dir)
{
spl_autoload_register(function ($class) use ($prefix, $base_dir) {
$base_dir = __DIR__ . "/{$base_dir}";
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0)
{
return;
}
$relative_class = substr($class, $len);
$file = $base_dir . str_replace('', '/', $relative_class) . '.php';
if (file_exists($file))
{
require $file;
}
});
}
The introduction of spl_autoload_register() gave programmers
the ability to create an autoload chain,
a series of functions that can be called to try and load a class or interface.
For example:
<?php
function autoloadModel($className) {
$filename = "models/" . $className . ".php";
if (is_readable($filename)) {
require $filename;
}
}
function autoloadController($className) {
$filename = "controllers/" . $className . ".php";
if (is_readable($filename)) {
require $filename;
}
}
spl_autoload_register("autoloadModel");
spl_autoload_register("autoloadController");