使用PSR-4配合composer autoload 自动加载文件夹

Posted php-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PSR-4配合composer autoload 自动加载文件夹相关的知识,希望对你有一定的参考价值。

 

require 文件很麻烦,使用PSR-4搭配composer一次加载,终生受用。

感觉类似java中的import了,自己先记录一下最近理解的。

用composer管理自己的包吧

安装composer

这个不多赘述

英文版教程

中文版教程

PSR-4规范

PSR-4-autoloader

构建项目目录

|-project

? |-src

? |-View.php

? |-app

? |-Tools.php

|-composer.json

上面路径的View.php在project/src/View.php 中,其他同理,View 和 Tools 只是为了做演示用的。

构建composer.json

打开创建的composer.json文件输入,这里拿monolog做例子。

{
  "require": {
    "monolog/monolog": "1.2.*"
  }
}

用composer加载包

在目录所在的命令行中输入

#linux全局安装下使用该命令
composer install
#windows下使用参考前面的composer教程
composer.phar install

加载完毕之后你的目录应该是这样的

|-project

? |-src

? |-View.php

? |-app

? |-Tools.php

? |-vendor

? |-composer/* composer目录下面的文件不在赘述

? |-monolog/* 同理

? |-autoload.php

|-composer.json

|-composer.lock

测试加载的monolog包

在project目录下创建一个index.php

#index.php
<?php
/**
 * Created by PhpStorm.
 * User: EasyChris<[email protected]>
 * Date: 2017/1/22
 * Time: 10:50
 */
//引入autoload.php文件
require_once ‘vendor/autoload.php‘;
//测试monlog
$log = new MonologLogger(‘name‘);
$log->pushHandler(new MonologHandlerStreamHandler(‘app.log‘, MonologLogger::WARNING));
$log->addWarning(‘Foo‘);
echo ‘success‘;

在浏览器里面访问该文件地址,通常应该是http://127.0.0.1/project/index.php

看到页面success之后,然后再查看project文件夹下面是不是多了一个app.log文件。那么恭喜你成功使用了composer加载包,并且使用该加载的包输出了log日志。

使用PSR-4加载文件

1.编辑composer.json 配置加载目录和空间名

编辑刚才的composer.json文件,添加autoload模块。

{
  "require": {
    "monolog/monolog": "1.2.*"
  },
  "autoload": {
    "psr-4": {
      "Acme\": "src/",
    }
  }
}

其中Acme\:"src"表示,将Acme这么空间名绑定到/project/src这个目录下

然后修改project/src/View.php文件

#View.php
<?php
/**
 * Created by PhpStorm.
 * User: EasyChris<[email protected]>
 * Date: 2017/1/22
 * Time: 11:06
 */
//命名空间为Acme,
namespace Acme;
class View
{
    public static function getView()
    {
        echo "get view";
    }
}

继续返回修改/project/index.php

#index.php
<?php
/**
 * Created by PhpStorm.
 * User: EasyChris<[email protected]>
 * Date: 2017/1/22
 * Time: 10:50
 */
require_once ‘vendor/autoload.php‘;
use AcmeView;

View::getView();

修改完毕之后返回命令行运行

#使用这个命令会自动生成autoload的文件
[email protected]:/var/www/public/test$ composer dump-autoload
Generating autoload files

PS:需要注意一下!

#生成环境下使用
composer dump-atoload -o
#这里的意思是composer dump-autoload --optimize,不是用的话会损失性能。

最后打开http://127.0.0.1/project/index.php如果显示get view 那么,恭喜你配置成功了。

拓展

接下来你就可以继续在src目录下面创建比如Tools.php然后不需要做其他require,便可以直接使用了。非常的方便,可以自己尝试一下。

总结

查看vender下的autoload.php文件你会看到,他其实是return了一个ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae::getLoader();

#autoload.php
<?php

// autoload.php @generated by Composer

require_once __DIR__ . ‘/composer/autoload_real.php‘;

return ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae::getLoader();

而这个getLoader()方法做了如下几件事

1.找 ComposerClassLoader 如果不存在就是生成一个实例放在ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae 中
2.将 composer cli 生成的各种 autoload_psr4, autoload_classmap, autoload_namespaces(psr-0) 全都注册到 ComposerClassLoader 中。
3.直接 require 所有在 autoload_files 中的文件

致谢参考

以上是关于使用PSR-4配合composer autoload 自动加载文件夹的主要内容,如果未能解决你的问题,请参考以下文章

psr-0 与作曲家自动加载不工作,但它与 psr-4 自动加载完美配合

Composer psr-4 自动加载问题

composer+psr-4实现自动加载

PSR-4 自动加载如何在 composer 中为自定义库工作?

PSR-4 没有加载我的项目类

composer的autoload来自动加载自己编写的函数库与类库?