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 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 自动加载文件夹的更多相关文章

  1. 深入解析 composer 的自动加载原理 (转)

    深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...

  2. 深入解析 composer 的自动加载原理

    PHP 自5.3的版本之后,已经重焕新生,命名空间.性状(trait).闭包.接口.PSR 规范.以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言.PHP 的生态系统也一直在演 ...

  3. 详解composer的自动加载机制

    composer是一个用PHP开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer可以自动帮你下载和安装这些依赖库,并实现自动加载代码. 安装composer composer ...

  4. composer 实现自动加载原理

    简介 一般在框架中都会用到composer工具,用它来管理依赖.其中composer有类的自动加载机制,可以加载composer下载的库中的所有的类文件.那么composer的自动加载机制是怎么实现的 ...

  5. Composer 的自动加载机制

    Composer 的自动加载机制 Composer 提供了四种自动加载方式,分别是 PSR-0.PSR-4.生成 classmap 以及之间包含 files. PSR-0 方式 PSR-0 方式要求目 ...

  6. composer的自动加载机制(autoload)

    composer的出现真是让人们眼前一亮,web开发从此变成了一件很『好玩』的事情,开发一个CMS就像在搭积木,从packagist中取出『积木』搭建在自己的代码中,一点一点搭建出一个属于自己的王国. ...

  7. 使用composer 实现自动加载

    准备工作:提前安装好composer 1.创建项目目录OOP 2.OOP目录下新建composer.json文件,composer.json是一个空json文件,代码如下: { } 3.打开控制台,进 ...

  8. 说说PHP的autoLoad自动加载机制

    __autoload的使用方法1: 最经常使用的就是这种方法,根据类名,找出类文件,然后require_one 复制代码 代码如下:function __autoload($class_name) { ...

  9. PHP autoload自动加载机制

    原文地址: http://www.jb51.net/article/31399.htm 一直不是很明白__autoload()和spl_autoload_register()到底有什么不同,找到了一个 ...

随机推荐

  1. Shell and DOS

    long long ago 自己便想总结下shell命令以及dos常用的命令,毕竟实际实践中会经常用到,用的好的批处理或者shell脚本会事半功倍,好了,废话不多说,开始. shell echo [字 ...

  2. 《Java大学教程》—第7章 类的实现

    统一建模语言(UML)用方框代表类.方框被分成3部分,第一部分是类名,第二部分是类的属性,第三部分是类的方法.类的属性(属性名称:属性类型):类的方法(方法名称(参数类型):返回值类型).静态的类的属 ...

  3. postgresql 按日期范围查询

    Timestamp without timezone 方法一: select * from user_info where create_date >= '2015-07-01' and cre ...

  4. 设计模式のSingleton Pattern(单例模式)----创建模式

    单例模式没有什么好讲的,我们 举个例子 #region 单例定义 /// <summary> /// 类单例 /// </summary> private static Win ...

  5. 数组长度为len,数组元素的范围是0到len-1,找出数组的重复元素

    public static int findDuplicate(int[] nums) { int len = nums.length; //注意这里的for循环写法,在交换元素后,i没有增加,还要继 ...

  6. C#定时备份正在播放的幻灯片、word文档、excel电子表格,mht格式文档

    控制台应用, 代码如下: using System; using System.Collections.Generic; using System.IO; using System.Linq; usi ...

  7. 【vue】vue +element 搭建项目,使用el-date-picker组件遇到的坑

    1.html <el-form-item prop="dateTime"> <el-date-picker v-model="messageDataFo ...

  8. 输出1-100 , 奇数偶数分别添加标识(for循环语句嵌套if-else语句)

    package com.summer.cn; /** * @author Summer * 输出1-100 , 奇数偶数分别添加标识 */ public class Test041518 { publ ...

  9. C# Socket的粘包处理

    当socket接收到数据后,会根据buffer的大小一点一点的接收数据,比如: 对方发来了1M的数据量过来,但是,本地的buffer只有1024字节,那就代表socket需要重复很多次才能真正收完这逻 ...

  10. 吉特日化MES-日化生产称料基本步骤

    在日化行业称料是一个非常重要的环节,整个生产过程中称料所占据的时间也比较长,特别是遇到对料体精度高,量大的情况下称料都比较困难,汇总一下人工称料的基本过程: (1) 称量任务准备:根据生产工单或者生产 ...