我是靠谱客的博主 温婉耳机,最近开发中收集的这篇文章主要介绍thinkphp自动加载,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

自动加载这个东西主要作用就是不用手动的require文件进来

比方说我要用LibClass,通常我们要先require LibClass.php然后才能使用LibClass是吧。但是php自动加载这个功能就能够很好的帮助我们,不用一个文件里面require N多的东西。

 

首先说下这个的实现原理

1、php在实例化一个类的时候先会找类的定义,找不到的话会去调用__autoload()这个魔术方法来做操作。所以我们可以在__autoload()里面写上我们的引入文件的操作。原理就是这么简单,没了没了,回家吃饭。。。。。。

但是这么做是会有弊端的:

①、__autoload()是一个函数,不能够反复的去定义,如果这个项目有几个人开发需要不同的文件引入规则就gg了。

②、还有就是使用第三方类库,鬼晓得他的结构是什么样的,怎么来实现自动加载。

③、这个函数7.2以后好像官方就不支持了,还这么写怕是要gg。

2、基于上述三点,现在主流的自动加载都做了改进啦。

①、不怎么使用__autoload()了,改成使用spl_autoload_register 

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

将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。

如果在你的程序中已经实现了__autoload()函数,它必须显式注册到__autoload()队列中。因为spl_autoload_register()函数会将Zend Engine中的__autoload()函数取代为spl_autoload()或spl_autoload_call()。

如果需要多条 autoload 函数,spl_autoload_register() 满足了此类需求。 它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。相比之下, __autoload() 只可以定义一次。

不好意思我比较懒直接拷贝官方的说明

②、然后我们来看下tp5的自动加载时怎么实现的,差不多就比较清楚这个自动加载了。

 

首先注册自动加载,使用的系统自定义Loader::autoload方法来实现的。

 

然后找到类文件,然后 引入

就是这么简单,当然其中有很多其他的逻辑判断,比如说根据命名空间还有composer支持还有psr4规则支持等。但是我们可以看到,核心的实现就是这么简单。有时间的话再来一一分析这几个加载。原理就这些了,溜了溜了。。。。 (20180505 深圳)

 

最后

以上就是温婉耳机为你收集整理的thinkphp自动加载的全部内容,希望文章能够帮你解决thinkphp自动加载所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(28)

评论列表共有 0 条评论

立即
投稿
返回
顶部