PHP Autoloading ohne Composer
Composer ist für viele Projekte sinnvoll aber nicht für jedes. Wer ein schlankes PHP-Projekt ohne externe Abhängigkeiten baut braucht keinen Composer nur um Klassen automatisch zu laden.
spl_autoload_register
PHP ruft diese Funktion auf wenn eine Klasse benötigt wird die noch nicht geladen ist.
spl_autoload_register(function (string $class): void {
$file = __DIR__ . '/src/' . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
require $file;
}
});
Aus dem Klassenname App\Core\Database wird der Pfad src/App/Core/Database.php.
Mehrere Verzeichnisse
spl_autoload_register(function (string $class): void {
$dirs = [
__DIR__ . '/core/',
__DIR__ . '/modules/',
];
$file = str_replace('\\', '/', $class) . '.php';
foreach ($dirs as $dir) {
$path = $dir . $file;
if (file_exists($path)) {
require $path;
return;
}
}
});
Namespaces und Verzeichnisstruktur
Der einfachste Ansatz ist die Verzeichnisstruktur direkt an die Namespace-Struktur anzupassen.
src/ ├── Core/ │ ├── Database.php → namespace Core; class Database │ └── Router.php → namespace Core; class Router ├── Modules/ │ └── UserModule.php → namespace Modules; class UserModule
Einmalig in der index.php einbinden
require_once __DIR__ . '/autoload.php'; $db = new Core\Database();
Kein Composer, kein vendor-Verzeichnis, kein Autoload-Dump. Für eigene Projekte ohne externe Pakete völlig ausreichend.