aura/autoload

提供符合PSR-4规范的自动加载实现。

2.0.4 2016-10-03 19:36 UTC

This package is auto-updated.

Last update: 2024-09-11 04:38:14 UTC


README

提供完整的PSR-4和有限的PSR-0自动加载器。虽然它可以通过Composer安装,但最好在非Composer导向的项目中使用。

对于仅提供PSR-0的自动加载器,请参阅 Aura.Autoload v1

前言

安装

此库需要PHP 5.3或更高版本;我们原则上推荐使用最新可用的PHP版本。它没有用户空间依赖。

可以通过Composer以aura/autoload的方式安装和自动加载。

或者,下载一个发布版本或克隆此仓库,然后要求或包含其autoload.php文件。

质量

Scrutinizer Code Quality Code Coverage Build Status

要运行命令行中的单元测试,请在包根目录下运行phpunit。(这需要phpunit可用。)

此库试图遵守PSR-1PSR-2PSR-4。如果您注意到遵守上的疏忽,请通过拉取请求发送补丁。

社区

要提问、提供反馈或与其他Aura社区进行沟通,请加入我们的Google Group,关注@auraphp在Twitter上的动态,或在Freenode的#auraphp上与我们聊天。

入门

要使用自动加载器,首先实例化它,然后将其注册到SPL自动加载器堆栈中

<?php
// instantiate
$loader = new \Aura\Autoload\Loader;

// append to the SPL autoloader stack; use register(true) to prepend instead
$loader->register();
?>

PSR-4命名空间前缀

要添加符合PSR-4规范的命名空间,指向该命名空间的基础目录。允许多个基础目录,并且将按照它们添加的顺序进行搜索。

<?php
$loader->addPrefix('Foo\Bar', '/path/to/foo-bar/src');
$loader->addPrefix('Foo\Bar', '/path/to/foo-bar/tests');
?>

要一次性设置多个命名空间前缀,覆盖所有之前的设置,请使用setPrefixes()

<?php
$loader->setPrefixes(array(
    'Foo\Bar' => array(
        '/path/to/foo-bar/src',
        '/path/to/foo-bar/tests',
    ),

    'Baz\Dib' => array(
        '/path/to/baz.dib/src',
        '/path/to/baz.dib/tests',
    ),
));
?>

PSR-0命名空间

要添加符合PSR-0规范的命名空间,其中一个使用仅在类名中使用的命名空间分隔符(不允许下划线),指向包含该命名空间类的目录。允许多个目录,并且将按照它们添加的顺序进行搜索。

<?php
$loader->addPrefix('Baz\Dib', '/path/to/baz-dib/src/Baz/Dib');
$loader->addPrefix('Baz\Dib', '/path/to/baz-dib/tests/Baz/Dib');
?>

与PSR-4一样,要一次性设置多个命名空间前缀,请使用setPrefixes()

显式类到文件映射

要将类显式映射到文件,请使用setClassFile()方法。

<?php
$loader->setClassFile('Foo\Bar\Baz', '/path/to/Foo/Bar/Baz.php');
?>

要一次性设置多个类到文件映射,覆盖所有之前的映射,请使用setClassFiles()。 (或者,使用addClassFiles()来追加到现有映射。)

<?php
$loader->setClassFiles(array(
    'Foo\Bar\Baz'  => '/path/to/Foo/Bar/Baz.php',
    'Foo\Bar\Qux'  => '/path/to/Foo/Bar/Qux.php',
    'Foo\Bar\Quux' => '/path/to/Foo/Bar/Quux.php',
));
?>

检查和调试

以下方法可用于检查Loader

  • getPrefixes()返回所有添加的命名空间前缀及其基础目录

  • getClassFiles()返回所有显式类到文件映射

  • getLoadedClasses()返回由Loader加载的所有类名及其加载类的文件名

如果由于某些原因无法加载类文件,请使用 getDebug() 查看调试信息。这会显示涉及 Loader 的最近一次自动加载尝试的信息日志。

<?php
// set the wrong path for Foo\Bar classes
$loader->addPrefix('Foo\Bar', '/wrong/path/to/foo-bar/src');

// this will fail
$baz = new \Foo\Bar\Baz;

// examine the debug information
var_dump($loader->getDebug());
// array(
//     'Loading Foo\\Bar\\Baz',
//     'No explicit class file',
//     'Foo\\Bar\\: /path/to/foo-bar/Baz.php not found',
//     'Foo\\: no base dirs',
//     'Foo\\Bar\\Baz not loaded',
// )
?>