关于PHP的autoload

autoload 是什么?

自动加载文件的机制。

当创建一个类时,由于其可重用性,通常会将一个类管理在一个文件中。
然而,当处理的文件数量增加时,每个脚本都需要在开头逐一进行“require”的操作。

因此,可以使用autoload这个自动加载文件的机制来自动加载文件。

spl_autoload_register (自动加载寄存器)

如果通常情况下没有使用autoload并且没有进行文件加载,那么在这种情况下将会产生致命错误。

<?php
$hoge = new Hoge();  //fatal error

使用spl_autoload_register函数注册自动加载器后,PHP将在发生错误之前调用注册的方法。

如果不使用spl_autoload_register


<?php
require_once 'MyClass1.php';
require_once 'MyClass2.php';
require_once 'MyClass3.php';

$obj  = new MyClass1();
$obj2 = new MyClass2();
$obj2 = new MyClass3();

如果使用spl_autoload_register,


<?php
spl_autoload_register(function ($class_name) {
    require_once $class_name . '.php';
});

$obj  = new MyClass1();
$obj2 = new MyClass2();
$obj3 = new MyClass3();

在composer中设置自动加载

使用composer-autoload可以实现,无需自行创建spl_autoload_register。

下载composer。

$ curl -s https://getcomposer.org/installer | php

composer.json文件

创建一个名为composer.json的文件,并进行autoload的设置。

{
    "autoload": {
        "psr-4": {
            "Namespace\\": "DirName/"
        }
    }
}

根据psr-4规范创建的名为Namespace的命名空间声明类被设置在名为DirName的目录中。

创建 autoload.php

$ composer dump-autoload

这样,autoload.php会在vender目录中被创建。
然后只需要在bootstrap.php等文件中使用require来加载已创建的autoload.php,即可使用autoload。
(bootstrap.php是用于创建和加载整个应用程序配置的文件。)