Composer 的自动加载机制

Composer 提供了四种自动加载方式,分别是 PSR-0PSR-4、生成 classmap 以及之间包含 files

PSR-0 方式

PSR-0 方式要求目录名和命名空间层层对应,这样导致目录结构会很深,现在已经被官方废弃了。 但是,因为现在的主流 PHP 框架都已经实现了 PSR-0 方式,所以 Composer 仍然向下兼容。按照 PSR-0 的规则,当加载 User\Info 这个类的时候,那么会去寻找 src/User/Info.php,最后这个配置会以 Map 的形式,写入生成的 vendor/composer/autoload_namespaces.php 中。

"autoload": {
"psr-0": {
"User\\": "src/",
}
}

PSR-4 方式

PSR-4 方式时 Composer 推荐使用的一种方式,同时也是 PSR-0 的替代方式。PSR-4 更容易使用及有更为简便的目录结构。当自动加载 User/Info 这个类的时候,那么会去寻找 src/User/Info 这个文件。PSR-4 的配置会被转换成 namespaceKeyDIR PATHValueMap 的形式,并写入生成的 vendor/composer/autoload_namesapce.php 中。

"autoload": {
"psr-4": {
"User\\": "src/",
}
}

classmap 方式

classmap 方式是通过配置指定的目录或文件,然后在 composer installupdate 的时候。会扫描指定目录下的 .php.inc 文件中的类到指定文件路径的映射,并写入生成的 vendor/composer/autoload_classmap.php 文件中。 假设:src 下有一个 BaseController 类,那么在 autoload_classmap.php 文件中,就会生成这样的配置:BaseController => $baseDir . '/src/BaseController.php'

"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}

files 方式

files 方式是手动指定供直接加载的文件。例如:有一个全局的 helper 函数,可以放到一个 helper 文件中直接进行加载。会生成一个数组包含配置中指定的 files,然后写入生成的 vendor/autoload_files.php

"autoload": {
"files": ["src/app/helper.php"]
}

最后

在配置 composer.json 完成之后,就直接运行 composer install。然后在项目的入口文件中,引入 require 'vendor/autoload.php' 就可以愉快的使用相关的类库了。

Composer 的自动加载机制的更多相关文章

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

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

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

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

  3. Yii2的深入学习--自动加载机制

    Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个  ...

  4. Yii2的深入学习--自动加载机制(转)

    Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个  ...

  5. composer 实现自动加载原理

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

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

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

  7. PHP 命名空间与自动加载机制介绍

    include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 requ ...

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

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

  9. thinkphp5源码剖析系列1-类的自动加载机制

    前言 tp5想必大家都不陌生,但是大部分人都停留在应用的层面,我将开启系列随笔,深入剖析tp5源码,以供大家顺利进阶.本章将从类的自动加载讲起,自动加载是tp框架的灵魂所在,也是成熟php框架的必备功 ...

随机推荐

  1. BZOJ 4011: [HNOI2015]落忆枫音 计数 + 拓扑排序

    Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题.  「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...

  2. 从零开始,编写简单的课程信息管理系统(使用jsp+servlet+javabean架构)

    一.相关的软件下载和环境配置 1.下载并配置JDK. 2.下载eclipse. 3.下载并配置apache-tomcat(服务器). 4.下载MySQL(数据库). 5.下载Navicat for M ...

  3. sublime text3 - vue修改data,视图无更新

    ubuntu系统使用sublime text3做vue开发的时候遇到了一个问题,就是修改vue文件并保存后视图页面并不会随之修改,只有重新run dev时修改才会生效,原因没找到 猜想应该是subli ...

  4. [CSP-S模拟测试]:Smooth(数学)

    题目传送门(内部题84) 输入格式 两个整数$B,K$ 输出格式 一个整数表示答案 样例 样例输入: 5 100 样例输出: 数据范围与提示 对于$40\%$的数据,保证答案小于$10^7$对于另$2 ...

  5. 二次封装axios,根据参数来实现多个请求多次拦截

    1. 新建 axiosTool.js 文件,设置请求拦截和处理的逻辑 import Vue from 'vue' import axios from 'axios' //取消请求 let Cancel ...

  6. Java 简单工厂

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  7. group by 与 order by 一起使用的时候

    select 后面的列+order by 后面的列 必须在group by 里面 也就是说 select 和 order by 后面的列是 group by 列的子集 而 select 和 order ...

  8. 黑马lavarel教程---1、lavarel目录结构

    黑马lavarel教程---1.lavarel目录结构 一.总结 一句话总结: 一套视频讲的东西太少,要看多套视频 1.安装lavarel需要额外开启的模块? extension=php_filein ...

  9. 二进制方式安装mysql

    下载官方打包好的rpm的集合 https://downloads.mysql.com/archives/get/file/mysql-5.7.20-1.el7.x86_64.rpm-bundle.ta ...

  10. Mybaits查询返回值是List类型的

    查询返回值是list类型的 1 首先在接口中写方法 public interface EmployeeMapper { public List<Employee> getEmpsByLas ...