使用PSR-4配合composer autoload 自动加载文件夹
require 文件很麻烦,使用PSR-4搭配composer一次加载,终生受用。
感觉类似java中的import了,自己先记录一下最近理解的。
用composer管理自己的包吧
安装composer
这个不多赘述
PSR-4规范
构建项目目录
|-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 Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::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 Acme\View;
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.找 Composer\ClassLoader 如果不存在就是生成一个实例放在ComposerAutoloaderInitaa62b39f628dda129dc5b4ebdfb2b2ae 中
2.将 composer cli 生成的各种 autoload_psr4, autoload_classmap, autoload_namespaces(psr-0) 全都注册到 Composer\ClassLoader 中。
3.直接 require 所有在 autoload_files 中的文件
致谢参考
使用PSR-4配合composer autoload 自动加载文件夹的更多相关文章
- 深入解析 composer 的自动加载原理 (转)
深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...
- 深入解析 composer 的自动加载原理
PHP 自5.3的版本之后,已经重焕新生,命名空间.性状(trait).闭包.接口.PSR 规范.以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言.PHP 的生态系统也一直在演 ...
- 详解composer的自动加载机制
composer是一个用PHP开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer可以自动帮你下载和安装这些依赖库,并实现自动加载代码. 安装composer composer ...
- composer 实现自动加载原理
简介 一般在框架中都会用到composer工具,用它来管理依赖.其中composer有类的自动加载机制,可以加载composer下载的库中的所有的类文件.那么composer的自动加载机制是怎么实现的 ...
- Composer 的自动加载机制
Composer 的自动加载机制 Composer 提供了四种自动加载方式,分别是 PSR-0.PSR-4.生成 classmap 以及之间包含 files. PSR-0 方式 PSR-0 方式要求目 ...
- composer的自动加载机制(autoload)
composer的出现真是让人们眼前一亮,web开发从此变成了一件很『好玩』的事情,开发一个CMS就像在搭积木,从packagist中取出『积木』搭建在自己的代码中,一点一点搭建出一个属于自己的王国. ...
- 使用composer 实现自动加载
准备工作:提前安装好composer 1.创建项目目录OOP 2.OOP目录下新建composer.json文件,composer.json是一个空json文件,代码如下: { } 3.打开控制台,进 ...
- 说说PHP的autoLoad自动加载机制
__autoload的使用方法1: 最经常使用的就是这种方法,根据类名,找出类文件,然后require_one 复制代码 代码如下:function __autoload($class_name) { ...
- PHP autoload自动加载机制
原文地址: http://www.jb51.net/article/31399.htm 一直不是很明白__autoload()和spl_autoload_register()到底有什么不同,找到了一个 ...
随机推荐
- ABAP 7.50 新特性 – Open SQL中的宿主表达式和其它表达式
在长期的停滞后,Open SQL的发展终于从沉睡中醒来.从ABAP 7.40开始,SAP推进了某些关键的改变,以尽可能地包含SQL92中的特性,并提供与ABAP CDS中的DDL里面的SELECT一样 ...
- 关于折半法查找的一些总结以及ArrayList类的总结
一.折半法查找的总结(这算法很好理解,但我花了好久琢磨他有啥用.....) 1.实际意义 折半法查找主要是为了能够很快在一个数组中找出我们所需要的那个元素,与往常我们通过一个一个比较的方法不同,折半法 ...
- 设计模式のObserver Pattern(观察者模式)----行为模式
一.问题产生背景 又被称为订阅发布模式. 最初流传最广的一个面试题:有一只猫咪,猫咪叫了一声,老鼠跑了,老人惊醒了,男主人骂,小偷吓得不敢动了....这就产生一个问题的模型,当对象间存在一对多关系时, ...
- ElasticSearch(三):Java操作ElasticSearch索引之CRUD
package com.gxy.ESChap01; import java.net.InetAddress; import java.util.HashMap; import java.util.Ma ...
- jenkins进行andriod打包,上传蒲公英
环境:macos jenkins sdk gradle 1.构建操作注意: mac电脑上 选择invoke gradle task数值是:clean 2.再创建一个task 然后进行gradle加参数 ...
- P1913 L国的战斗之伞兵(广搜BFS)
就是在输入的时候把 ‘o’ 的放在队里,然后,直接BFS就可以了.感觉是水题. #include<iostream> #include<queue> using namespa ...
- 三.js实例
1.完成一个双色球,红球的自选效果 规则:1-33 用表格画出一个1到33的格子,点击一个自选按钮,将随机选中6个数字,每个表格对应的数字的背景就改为一个红球的效果 双色球.html <!DOC ...
- 区分range() , np.arange() , np.linspace()
content: range() np.arange() np.linspace() 一.range(start, stop, step) 1.range() 为 python 自带函数 2.生成一个 ...
- 【Codeforces 339】Xenia and Bit Operations
Codeforces 339 D 题意:给定\(2^n\)个数字,现在把它们进行如下操作: 相邻的两个数取\(or\) 相邻的两个数取\(xor\) 以此类推,直到剩下一个数. 问每次修改一个数字, ...
- linux驱动之中断处理过程C程序部分
当发生中断之后,linux系统在汇编阶段经过一系列跳转,最终跳转到asm_do_IRQ()函数,开始C程序阶段的处理.在汇编阶段,程序已经计算出发生中断的中断号irq,这个关键参数最终传递给asm_d ...