composer分析(二)结合PSR-4


  • PSR-4提供了一种文件和路径映射关系,非常类似文件系统的组织结构

  • 全限定类名

    \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
    规定了类必须有一个顶级命名空间,可以有多个子命名空间。
    顶级命名空间和目录对应的关系相对特殊,可在autoload_psr4.php中查看
    映射关系是一个数组,是因为composer支持从多个目录下加载同一个命名空间前缀
    $vendorDir = dirname(dirname(__FILE__));
    $baseDir = dirname($vendorDir);
    return array(
    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
    'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'),
    'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
    ...
    'App\\' => array($baseDir . '/App'),
    ); 子命名空间分别对应顶级路径下的文件夹,如 App\Logic\HttpController\TestController对应路径是"{$baseDir} /App/Logic/HttpController"下的TestController.php 同时PSR-4要求文件名必须和类名保持完全一致,上述的TestController.php文件名由TesctController这个类名决定。
  • 映射规则

    vendor/
    vendor_name/
    package_name/
    src/
    ClassName.php # Vendor_Name\Package_Name\ClassName
    tests/
    ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
  • composer文件夹下的文件

    autoload_classmap.php  // 保存类文件和真实路径映射
    autoload_files.php // 保存全局函数文件和路径映射
    autoload_psr4.php // 保存顶级命名空间和路径映射
    autoload_static.php // 保存composer加载器解析过程中需要用到的映射关系数组
    ClassLoader.php
    此文件中的findFile方法会先查找classmap中是否存在需要加载类的映射,如果不存在会先根据上文描述的PSR-4规则拼接文件的真实路径,没找到还会走PSR-0规则。最后然会文件的绝对路径include完成文件的加载。可以看到如果存在类路径映射会非常快的实现类的自动加载,就不需要文件系统的检查了。
    如何生成类映射关系: 执行命令 composer dump-autoload (-o),生产环境建议执行,因为从classmap中直接返回映射关系,便不需要再去动态读取PSR加载规范了,可减少文件系统的操作,提升部分性能
  • 有兴趣的可以打印composer返回的自动加载器对象,允许我们在引入autoload.php文件后动态添加各种的映射关系


下集预告:composer的基本命令

composer分析(二)结合PSR-4的更多相关文章

  1. SNMP报文抓取与分析(二)

    SNMP报文抓取与分析(二) SNMP报文抓取与分析(二) 1.SNMP报文表示简介 基本编码规则BER 标识域Tag表示 长度域length表示 2.SNMP报文详细分析(以一个get-respon ...

  2. Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题

    4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...

  3. yhd日志分析(二)

    yhd日志分析(二) 继续yhd日志分析,统计数据 日期 uv pv 登录人数 游客人数 平均访问时长 二跳率 独立ip数 1 分析 登录人数 count(distinct endUserId) 游客 ...

  4. SQLite入门与分析(二)---设计与概念(续)

    SQLite入门与分析(二)---设计与概念(续)   写在前面:本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim G ...

  5. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

  6. 一些有用的javascript实例分析(二)

    原文:一些有用的javascript实例分析(二) 5 求出数组中所有数字的和 window.onload = function () { var oBtn = document.getElement ...

  7. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  8. MapReduce深度分析(二)

    MapReduce深度分析(二) 五.JobTracker分析 JobTracker是hadoop的重要的后台守护进程之一,主要的功能是管理任务调度.管理TaskTracker.监控作业执行.运行作业 ...

  9. Java线程池使用和分析(二) - execute()原理

    相关文章目录: Java线程池使用和分析(一) Java线程池使用和分析(二) - execute()原理 execute()是 java.util.concurrent.Executor接口中唯一的 ...

随机推荐

  1. 删除数据-大表根据rowid来删除部分数据

    偶遇需求,大表中需要删除部分数据.分批删除. declare TYPE type_table_rowid IS TABLE OF ROWID INDEX BY BINARY_INTEGER;table ...

  2. linux之FTP服务搭建 ( ftp文件传输协议 VSFTPd虚拟用户)

    FTP服务搭建 配置实验之前关闭防火墙 iptables -F iptables -X iptables -Z systemctl stop firewalld setenforce 0 1.ftp简 ...

  3. 一文学会MySQL的explain工具

    开篇说明 (1) 本文将细致介绍MySQL的explain工具,是下一篇<一文读懂MySQL的索引机制及查询优化>的准备篇. (2) 本文主要基于MySQL5.7版本(https://de ...

  4. 使用Spock 单元测试

    一.什么是Spock Spock 是一个测试框架,甚至可以说是一门语言他是基于Groovy开发的.它的语法完全遵循 BDD(行为驱动开发) 风格的结构.它是基于 Junit test runner 上 ...

  5. 制作的excel表格如何放到微信公众号文章中?

    制作的excel表格如何放到微信公众号文章中? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件 ...

  6. LeetCode 763划分字母区间 详解

    题目详情 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示例 1: 输入: S = "ab ...

  7. 【HNOI2015】菜肴制作 - 拓扑排序+贪心

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

  8. 解决React路由跳转时出现的红色警告: Warning: Failed prop type: Invalid prop `component` of type `object` supplied to `Route`, expected `function`.

    一.报警如图: 二.查找路由版本 我使用路由版本是4.3.1的,然后我测试所有4.0+版本都会出现以上警告. 三.未解决前的代码 三.我又解读了一下报警告内容的大致意思:就是props需要通过函数返回 ...

  9. (转)软件产品化,国内IT人之痛

    原文链接:http://blog.csdn.net/harrymeng/article/details/5254415 记得在网上看过一则印度软件的有趣故事,意思是先从印度6个不同城市的软件公司中选出 ...

  10. Excel 科学计数法数值转换

    问题场景 如果导出的数据文件后缀为.CSV,一般数值类型的数据超过12位后,单元格的数据就用科学计数法来表示了. 比如身份证号.较长的id,数值会超过12位,而科学计数法表示,不方便查看或操作,很多情 ...