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 中的文件
发表回复