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-autoloadGenerating 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 Composerrequire_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 中的文件