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. BZOJ 4820 [SDOI2017] 硬币游戏

    Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了.同学们觉得要加强趣味性,所以要找 ...

  2. 12个 Linux 中 grep 命令的超级用法实例

    12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...

  3. 7.01-beautiful_soup2

    # pip install beautifulsoup4 from bs4 import BeautifulSoup html_doc = """ <html> ...

  4. 6.05-btc

    import requests from lxml import etree import json class BtcSpider(object): def __init__(self): self ...

  5. spring jwt springboot RESTful API认证方式

    RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authentication)和授权(Authorization)过程,保证API的安全性. Authenticatio ...

  6. sql 查询所有子节点示例

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code <!-- 查询机构的所有子机构 --> <select id=&qu ...

  7. 【转】PHP获取重定向URL的几种方法

    有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数php自 ...

  8. oracle 11G direct path read 很美也很伤人

    direct path read在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读 ...

  9. 跨平台Redis可视化工具Web Redis Manager

    一.简介 最近因为工作需要,使用了一些单机版Redis的界面化管理工具,使用过程中那惨痛的体验真的只有用过的人才能体会:为此本人和小伙伴准备动手一个Redis可视化工具,但是因为小伙伴最近工作比较忙, ...

  10. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 即时消息提醒功能改进

    可以给自己的信息管理系统增加一些即时消息提醒功能,简单方便,一般是一行代码就可以发送提醒信息了,方便二次开发,个性化改进. 1:可以用简拼,快速查找内部员工. 2:双击直接可以发QQ消息. 3:双击直 ...