aura / autoload
提供符合PSR-4规范的自动加载实现。
Requires
- php: >=5.3.0
README
提供完整的PSR-4和有限的PSR-0自动加载器。虽然它可以通过Composer安装,但最好在非Composer导向的项目中使用。
对于仅提供PSR-0的自动加载器,请参阅 Aura.Autoload v1。
前言
安装
此库需要PHP 5.3或更高版本;我们原则上推荐使用最新可用的PHP版本。它没有用户空间依赖。
可以通过Composer以aura/autoload的方式安装和自动加载。
或者,下载一个发布版本或克隆此仓库,然后要求或包含其autoload.php文件。
质量
要运行命令行中的单元测试,请在包根目录下运行phpunit
。(这需要phpunit
可用。)
此库试图遵守PSR-1、PSR-2和PSR-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', // ) ?>