作曲家自动装载的示例分析

  介绍

小编给大家分享一下作曲家自动装载的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

众所周知<代码> 是作曲家现代PHP项目的基石,与古老的<代码>梨> 作曲家> npm安装- g代码和<代码> npm安装> 梨> psr - *> 梨>

好吧,可能这是好事,但是也是坏的事。好事是很多优秀的包都从<代码>梨> PHP_CodeSniffer ,<代码> PHP_Unit> laravel> 作曲家,因为<代码> psr-4 这个规范真是不能再爽更多。这真的是我用各种包用得最顺手的一套命名规范了。

扯远了,扯回<代码>供应商/作曲家/autoload_real。php代码这个核心<代码> 作曲家文件。

自动加载的类型

总体来说作曲家提供了几种自动加载类型

<李>

classmap

<李>

psr-0

<李>

psr-4

<李>

文件

这几种自动加载都会用的到,理论上来说,项目代码用<代码> psr-4> 用<代码>文件自动加载,<代码> 发展相关用<代码> classmap> psr-0>

classmap

这应该是最最简单的自动装载模式了。大概的意思就是这样的:

{   “classmap"才能:,(“src/?   }

然后作曲家在背后就会读取这个文件夹中所有的文件然后再<代码>供应商/作曲家/autoload_classmap。php代码中怒将所有的<>强类,的名称空间+ classname生成成一个关键=比;价值的php数组

& lt; php ?   [return    & # 39;才能应用\ \ \ \控制台内核# 39;,=祝辞,baseDir 美元;只& # 39;/App/控制台/Kernel.php& # 39;   ];   ?在

然后就可以光明正大地用<代码> spl_autoload_register 这个函数来怒做自动加载了。

好吧上面的例子其实有点棘手就是上面这个自动装载实际上是根据prs-4来生成出来的。不过这不重要,了解底层重要的点,我们可以看到所有的所谓的半自动的其实可以理解为生成了这么一个<代码> classmap> 作曲家dump-autoload - o> compoesr>

psr-0

现在这个标准已经过时了。当初制定这个标准的时候主要是在php 5.2从刚刚跃迁到5.3 +有了命名空间的概念,所以这个时候<代码> psr-0> Acme_Util_ClassName 这样的写法。

{   “name"才能:,“acme/util"   “才能auto",:, {   ,,,“psr-0":, {   ,,,,,“Acme \ \ Util \ \“:,“src/?   ,,,}   ,,}   }

文档结构是这样的

供应商/,acme/,,util/,,,,composer.json   ,,,,src/,,,,,,,Acme/,,,,,,,,,Util/,,,,,,,,,,,ClassName.php

名称。php中是这样的

& lt; php ?   class  Acme_Util_ClassName {}   ?在

我们可以看到由于旧版本的php没有名称空间所以必须通过<代码> _ 将类区分开。

这样稍微有点麻烦。指向一个文件夹之后<代码> src> src> _ 的写法仔细想想这是唯一的办法了。(psr-0要求半自动的的时候将类中的<代码> _ 转义为& # 39;\ & # 39;)

所以在php5.2版本已经彻底被抛弃的今天,<代码>图> psr-4

psr-4

这个标准出来的时候一片喷声,大概的意思就是<代码>图> psr-0 然后紧跟着进推翻了自己,不过图也有自己的苦衷,帮没有名称空间支持的php5.2擦了那么久的屁股,在2014年10月21日的早晨,终于丢失了睡眠。

作曲家自动装载的示例分析