Looking for php Answers? Try Ask4KnowledgeBase
Looking for php Keywords? Try Ask4Keywords

PHP Le chargement automatique remplace le chargement de la définition de classe manuelle


Exemple

// 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');

Comparez cela aux autres exemples. Notez que la require "Animal.php" été remplacée par require "autoload.php" . Nous incluons toujours un fichier externe au moment de l'exécution, mais au lieu d'inclure une définition de classe spécifique , nous incluons une logique pouvant inclure n'importe quelle classe. C'est un niveau d'indirection qui facilite notre développement. Au lieu d'écrire un require pour chaque classe , nous, nous écrivons un require pour toutes les classes. Nous pouvons remplacer N require avec 1 require .

La magie se produit avec spl_autoload_register . Cette fonction PHP prend une fermeture et ajoute la fermeture à une file d' attente de fermetures. Lorsque PHP rencontre une classe pour laquelle il n'a pas de définition, PHP transmet le nom de la classe à chaque fermeture de la file. Si la classe existe après l'appel d'une fermeture, PHP revient à son activité précédente. Si la classe ne parvient pas à exister après avoir essayé toute la file d'attente, PHP se bloque avec "Class", quel que soit "non trouvé".