自动加载取代了手动类定义加载
// 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’。”