spl_autoload_register
funkcja
Rejestruje funkcję autoloadera wywoływaną przez PHP, gdy klasa nie jest jeszcze załadowana. Mechanizm, który Composer automatyzuje dla PSR-4.
spl_autoload_register(?callable $callback = null, bool $throw = true, bool $prepend = false): bool
spl_autoload_register dodaje callable do kolejki autoloaderów PHP. Gdy kod odwołuje się do nieznanej klasy, PHP iteruje po tej kolejce i wywołuje kolejne callbacki z nazwą klasy, aż jeden z nich załaduje plik. Parametr $prepend = true umieszcza autoloader na początku kolejki. Parametr $throw (drugi) jest ignorowany od PHP 8.0 — PHP zawsze rzuca wyjątek gdy klasy nie uda się załadować i tego zachowania nie można wyłączyć. W nowoczesnych projektach nie wywołujesz tej funkcji ręcznie — Composer generuje zoptymalizowany autoloader PSR-4 i rejestruje go automatycznie przez vendor/autoload.php. Rozumienie ręcznej rejestracji pomaga jednak zrozumieć, co Composer robi za kulisami.
<?php
declare(strict_types=1);
// Ręczny autoloader mapujący przestrzeń nazw App\ na katalog src/:
spl_autoload_register(function (string $class): void {
$prefix = 'App\\';
$baseDir = __DIR__ . '/src/';
if (!str_starts_with($class, $prefix)) {
return; // nie nasza przestrzeń nazw — oddaj kontrolę następnemu autoloaderowi
}
$relatywna = substr($class, strlen($prefix));
$plik = $baseDir . str_replace('\\', '/', $relatywna) . '.php';
if (file_exists($plik)) {
require $plik;
}
});
// Po rejestracji PHP automatycznie wywoła autoloader przy pierwszym użyciu klasy:
// $u = new App\Model\Uzytkownik(); // → ładuje src/Model/Uzytkownik.php
// W projekcie z Composerem zamiast powyższego wystarczy:
// require __DIR__ . '/vendor/autoload.php';