自動載入取代了手動類定義載入

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

將此與其他示例進行比較。注意 require "Animal.php" 是如何被 require "autoload.php" 取代的。我們仍然在執行時包含一個外部檔案,但是我們不包括特定的類定義,而是包含可以包含任何類的邏輯。這是一種間接的水平,可以簡化我們的發展。我們不是為我們需要的每個類寫一個 require,而是為所有類編寫一個 require。我們可以用 1 require 替換 N require

spl_autoload_register 會產生魔力 。這個 PHP 函式接受一個閉包,並將閉包新增到閉包佇列中。當 PHP 遇到沒有定義的類時,PHP 會將類名移交給佇列中的每個閉包。如果在呼叫閉包後該類存在,PHP 將返回其先前的業務。如果在嘗試整個佇列後該類無法存在,那麼 PHP 將崩潰並出現“Class’Whatever’not found’。”