概述
自动加载这个东西主要作用就是不用手动的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自动加载所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复