自动加载函数流程之composer autoload_real.php (

我们探索了 从

1 app/public/index.php 开始

2 加载 bootstrap /autoload.php 文件

3 然后加载到 vendor / autoload.php文件

4 然后终于找到了 /vendor/composer/autoload_real.php 文件

终于开始了 真正的自动加载,在这里 他封装了一个类。

而且这个类,也是十分 奇特,是 一个 ComposerAutoLoaderInit[salt] 一个非常特殊的类!

跟自动生成是类似的。

通过静态函数 getLoader 函数,执行 内部的 方法。

我们首先看一下这个神器的文件,里面包含两个部分的内容:

1 ComposerAutoLoaderInit[salt] 类

2 composerRequire[salt] 函数

在类内部:包含 1个 私有的变量函数 就是 loader 函数

包含两个内部的函数:

1loaderClassLoader(class):void 函数

2getLoader():Composer\Autoload\Composer

下面细分一下 getLoader()函数内部的情况,

首先进行了单列变量的一个判读 也就是说 $loader 变量 里面是否存有相关数据

if(null!==self::$loader){

return

self::$loader;

}

如果存有的话,直接返回,停止向后执行。

否则!

正式开始 自动加载的流程:

第一步:注册系统自动加载函数

spl_autoload_register(array('ComposerAutoloaderInitf0edef8d82d469d4cfba4316d7feb75f','loadClassLoader'),true,true);

知识点扩展:

spl_autoload_register

这个函数:

boolspl_autoload_register([callable$autoload_function[,bool$throw=true[,bool$prepend=false]]] )

spl_autoload_register可以很好地处理需要多个加载器的情况,这种情况下spl_autoload_register会按顺序依次调用之前注册过的加载器。作为对比,__autoload因为是一个函数,所以只能被定义一次。

autoload_function

欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload的默认实现函数spl_autoload()

throw

此参数设置了autoload_function无法成功注册时,spl_autoload_register()是否抛出异常。

prepend

如果是true,spl_autoload_register()会添加函数到队列之首,而不是队列尾部。

上述用法解析为:自动加载 类的 loadClassLoader 函数,如果添加异常,则抛出异常, 后面的true 代表

添加的 序列 之首。

然后回到正途:

第二步:实例化 这个 ClassLoader 类

self::$loader=$loader=new\Composer\Autoload\ClassLoader();

并且赋值给 当前的单例句柄。

第三步:删除已经注册的自动加载函数

spl_autoload_unregister—注销已注册的__autoload()函数

综合上述三步:就是为了 能够 让 self::$laoder = $loader 能够被实例化!

如果,仅仅是为了实现这个,我觉得,还不如,直接

就自动加载函数文件。

接下来手下加载命名空间:

1$map=require__DIR__.'/autoload_namespaces.php';

2

foreach($mapas$namespace=>$path){

$loader->set($namespace,$path);

}

同 ClassLoader.php 里面的 set函数 把 文件存入变量 仓库

$this->prefixesPsr0[$prefix[0]][$prefix] =

(array)$paths;

注意:这里的0是我们的

第一个字母。

第二步:注册psr4标准的文件 的命名 空间 对应的路径

$map=require__DIR__.'/autoload_psr4.php';

foreach($mapas$namespace=>$path){

$loader->setPsr4($namespace,$path);

}

$this->prefixDirsPsr4[$prefix] =

(array)$paths;

第三:

$classMap=require__DIR__.'/autoload_classmap.php';

if($classMap){

$loader->addClassMap($classMap);

}

$this->classMap=array_merge($this->classMap,$classMap);

注册真正的 spl_autoload_register 方法为 ClassLoader->loaderClass

方法,

加载全部的自动加载的文件

$includeFiles=require__DIR__.'/autoload_files.php';

foreach($includeFilesas$fileIdentifier=>$file){

composerRequiref0edef8d82d469d4cfba4316d7feb75f($fileIdentifier,$file);

}

返回 实例化的 后的处理类对象。

处理完成

总结:

1 就是按照 各种标准 加载 命名空间对应的路径

2 按照psr4标准 加载命名空间对应的路径

3 加载 系统需要加载的类文件

4 注册自动加载函数

5加载 帮助函数

php初学者-千锋php课程笔记

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容