malkusch/php-autoloader

该包已被废弃,不再维护。没有推荐替代包。

此自动加载器支持PHP 5.4的特性和所有可自动加载的PHP功能。它可以在任何情况下找到每个类、接口或特性的定义。无论使用何种约定。自动加载器基于索引。在构建索引后,将不会有性能问题。构建操作已完成

1.14.6 2015-07-09 18:40 UTC

This package is not auto-updated.

Last update: 2017-11-17 20:18:42 UTC


README

自动加载器尽可能简单直接地运行。您只需包含autoloader.php文件即可。不必担心第一次调用时消耗的时间。让它构建索引。第二次运行将像闪电一样快。

最简单且可能是最常见的使用场景如下所示

./index.php

<?php
require __DIR__ . "/autoloader/autoloader.php";
$myObject = new MyClass();

./classes/MyClass.php

<?php
class MyClass extends MyParentClass
{

}

./classes/MyParentClass.php

<?php
class MyParentClass
{

}

如您所见,只需一次性引入autoloader.php即可。如果在这篇文档的根目录中完成此操作(在这种情况下为index.php),则自动加载器已配置。在引入此文件后,您无需担心类所在的位置。

另一种用例是将类路径放在文档根目录之外。由于自动加载器不知道这个任意路径,您必须告诉它类路径在哪里

<?php

use malkusch\autoloader\Autoloader;

require __DIR__ . "/autoloader/autoloader.php";

// As the guessed class path is wrong you should remove this Autoloader.
Autoloader::getRegisteredAutoloader()->remove();

// register your arbitrary class path
$autoloader = new Autoloader($classpath);
$autoloader->register();

// You might also have more class paths
$autoloader2 = new Autoloader($classpath2);
$autoloader2->register();

如果您有机会启用PHP的tokenizer,则应该这样做。否则,自动加载器必须使用基于PCRE的解析器,这不如PHP的tokenizer可靠。

自动加载器假定类名是唯一的。如果您有具有相同名称的类,则行为是未定义的。

生成可移植自动加载器

autoloader/bin/autoloader-build.php可以为您的项目生成可移植自动加载器。使用参数--classpath指定每个类路径。如果您有更多类路径,则必须多次使用该参数。参数--deploypath告诉脚本可移植自动加载器和其索引文件将存储的位置。之后,您的项目可以使用生成的自动加载器。在部署路径中,您将找到一个autoloader.php。您的项目必须包含此文件。

示例

您的项目看起来像这样

  • ./project/index.php
  • ./project/classes/*.php
  • ./project/moreClasses/*.php

您想在项目/autoloader中为类路径project/classes和project/moreClasses部署一个可移植自动加载器

# autoloader-build.php \
    --classpath project/classes \
    --classpath project/moreClasses \
    --deploypath project/autoloader

这将在项目/autoloader/autoloader.php中生成一个可移植自动加载器。您必须将此自动加载器包含在index.php中

<?php
include __DIR__ . "/autoloader/autoloader.php";

现在index.php可以找到所有类。

注意:此生成的可移植自动加载器是一个非常小的自动加载器。它只是生成时存储的所有类的索引。每次您更改类路径中的任何内容时,都必须重新生成自动加载器。