使用spl_autoload_register而不使用include

时间:2017-10-15 07:23:26

标签: php autoload

我在这里和其他论坛上看到了很多线程,这些线程很多时候都会问过这个问题,但我仍然看到在答案中使用PHP的include函数?

如何使用此功能,而不是完全使用include功能?

谢谢

2 个答案:

答案 0 :(得分:1)

  

如何使用此功能,而不是完全使用包含功能

您不能完全不使用$subtract: [ new Date( "1970-01-01T00:00:00.000Z" ), new Date( "1970-01-01T00:00:00.000" ) ] ,这不是使用自动加载器的重点,因为您通常需要至少包含自动加载器;)。该自动加载器是PHP在代码中尝试使用未知类时正在调用的常规PHP代码。它应该包含正确的文件以使类已知,并且代码将继续,因为您在代码中手动明确include正确的文件。因此,当您的代码使用分类(OOP)时,主要好处就出现了 - 您不需要关心是否包含了要实例化对象的类。您只需include或致电new Foo(),如果所有设置都正确,则可以使用。

答案 1 :(得分:0)

函数spl_autoload_register用于将回调注册到自动加载器队列中。

PHP自动加载器是PHP解释器的一项功能,当未定义类时,它会逐个调用队列中注册的函数,要求它们加载类,直到类可用。在调用所有函数后,类仍然不可用,解释器会触发致命错误。

自动加载器不会执行任何魔法。注册职能的全部责任是使课程可用。他们中的大多数使用缺少类的名称和命名空间来确定包含类声明和include它的文件的路径。

这就是事情的运作方式。在PHP中生成类的方法并不多,对于可重用自动加载器回调,列表以include 1 开始和结束({{3} },include_oncerequire也可以使用,但在这种情况下它们没有任何区别。)

自动加载器回调本身保留在单独的文件中(为了可重用),通常该文件还包含其自动加载器回调(对require_once的调用)的注册。您的所有代码所要做的就是在每个作为应用程序入口点的文件中将此文件spl_autoload_register一次。

在所有条件相同的情况下,您的应用程序需要至少使用include一次,并且一次也是所需的最大使用次数。自动加载器回调也使用include(可能也只使用一次),但您不会每天编写自动加载器回调。如果你写了一个并且你写得很好,你可以重复使用它。大多数人从未写过自动加载器回调,他们永远不会写一个。

使用include非常简单,如果您遵循命名项目文件的Composer规则,PSR-4可以为您的项目生成自动加载器,知道如何加载您的类(当然,它使用include的场景。您所要做的就是在项目的根目录中运行composer init,运行composer install并在代表应用程序入口点的文件中写入include 'vendor/autoload.php';。不需要include的其他用途。

1 include另一个文件不需要自动加载器回调来使该类可用。它可以动态生成类的代码并Composer - 使用它,但这种方法的用例非常有限。它由测试套件f.e.用于生成模拟类。