自动加载取代了手动类定义加载

// 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’。”