PHP Il caricamento automatico sostituisce il caricamento manuale delle definizioni di classe

Esempio

// autoload.php
spl_autoload_register(function ($class) {
    require_once "$class.php";
});

// Animal.php
class Animal {
    public function eats($food) {
         echo "Yum, $food!";
    }
}

// zoo.php
require 'autoload.php';
$animal = new Animal;
$animal->eats('slop');

// aquarium.php
require 'autoload.php';
$animal = new Animal;
$animal->eats('shrimp');

Confronta questo con gli altri esempi. Nota come require "Animal.php" stato sostituito con require "autoload.php" . Stiamo ancora includendo un file esterno in fase di esecuzione, ma piuttosto che includere una specifica definizione di classe includiamo la logica che può includere qualsiasi classe. È un livello di indirezione che facilita il nostro sviluppo. Invece di scrivere uno require per ogni classe di cui abbiamo bisogno, scriviamo uno require per tutte le classi. Possiamo sostituire N require con 1 require .

La magia accade con spl_autoload_register . Questa funzione PHP richiede una chiusura e aggiunge la chiusura a una coda di chiusure. Quando PHP incontra una classe per la quale non ha una definizione, PHP consegna il nome della classe a ogni chiusura nella coda. Se la classe esiste dopo aver chiamato una chiusura, PHP ritorna alla sua attività precedente. Se la classe non riesce a esistere dopo aver provato l'intera coda, PHP si blocca con "Class" Whatever "not found."