展开全部
直接在入口文件中包含composer的autoload脚本
Composer
是PHP的一个包依赖管理工具,类似Ruby中的32313133353236313431303231363533e4b893e5b19e31333361316565RubyGems或者Node中的NPM,它并非官方,但现在已经非常流行。此文并不介绍如何使用Composer,而是关注于它的autoload的内容吧。
举例来说,假设我们的项目想要使用 monolog 这个日志工具,就需要在composer.json里告诉composer我们需要它:
{
"require": {
"monolog/monolog": "1.*"
}
}
之后执行:
php composer.phar install
好,现在安装完了,该怎么使用呢?Composer自动生成了一个autoload文件,你只需要引用它
require '/path/to/vendor/autoload.php';
然后就可以非常方便的去使用第三方的类库了,是不是感觉很棒啊!对于我们需要的monolog,就可以这样用了:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('/path/to/log/log_name.log', Logger::WARNING));
// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');
在这个过程中,Composer做了什么呢?它生成了一个autoloader,再根据各个包自己的autoload配置,从而帮我们进行自动加载的工作。(如果对autoload这部分内容不太了解,可以看我之前的
一篇文章
)接下来让我们看看Composer是怎么做的吧。
对于第三方包的自动加载,Composer提供了四种方式的支持,分别是
PSR-0和PSR-4的自动加载(我的一篇文章也有介绍过它们),生成class-map,和直接包含files的方式。
PSR-4是composer推荐使用的一种方式,因为它更易使用并能带来更简洁的目录结构。在composer.json里是这样进行配置的:
{
"autoload": {
"psr-4": {
"Foo\\": "src/",
}
}
}
key和value就定义出了namespace以及到相应path的映射。按照PSR-4的规则,当试图自动加载 "Foo\\Bar\\Baz"
这个class时,会去寻找 "src/Bar/Baz.php" 这个文件,如果它存在则进行加载。注意,
"Foo\\"
并没有出现在文件路径中,这是与PSR-0不同的一点,如果PSR-0有此配置,那么会去寻找
"src/Foo/Bar/Baz.php"
这个文件。
另外注意PSR-4和PSR-0的配置里,"Foo\\"结尾的命名空间分隔符必须加上并且进行转义,以防出现"Foo"匹配到了"FooBar"这样的意外发生。
在composer安装或更新完之后,psr-4的配置换被转换成namespace为key,dir path为value的Map的形式,并写入生成的
vendor/composer/autoload_psr4.php 文件之中。
{
"autoload": {