malkusch / php-autoloader
此自动加载器支持PHP 5.4的特性和所有可自动加载的PHP功能。它可以在任何情况下找到每个类、接口或特性的定义。无论使用何种约定。自动加载器基于索引。在构建索引后,将不会有性能问题。构建操作已完成
Requires
- php: >=5.4.0
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可以找到所有类。
注意:此生成的可移植自动加载器是一个非常小的自动加载器。它只是生成时存储的所有类的索引。每次您更改类路径中的任何内容时,都必须重新生成自动加载器。