乐趣区

关于composer:使用PSR4配合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<chris@afox.cc>
 * 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<chris@afox.cc>
 * 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<chris@afox.cc>
 * Date: 2017/1/22
 * Time: 10:50
 */
require_once 'vendor/autoload.php';
use AcmeView;

View::getView(); 

批改结束之后返回命令行运行

# 应用这个命令会主动生成 autoload 的文件
vagrant@easychris:/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 中的文件

退出移动版