美文网首页
TP5源码:IOC容器及Facade 深度解析(一)

TP5源码:IOC容器及Facade 深度解析(一)

作者: 机智的老刘明同志 | 来源:发表于2019-10-20 20:21 被阅读0次

知识点目录:

        1.单例设计模式

        2.注册树模式

        3.依赖注入(DI)

        4.php反射机制

        5.自定义容器类(上述4者融合)

        6.分析tp5.1的容器类


1.单例设计模式:

        目的:在整个项目中,一个类只有一个实例

        一个懒汉式的单例设计模式(烂大街了,还是截个图放上去吧)

2. 注册树模式:

        注册树模式通过将对象实例注册到一颗全局的树上

        需要的时候从对象树上摘下来使用  (最简单版,后期细说)

3.依赖注入

        依赖注入只要用来减少代码间的耦合

        有效分离对象和它所需的外部资源        

4.php的反射机制:

        通俗说法:根据一个对象,知道它所属的类,拥有哪些方法,属性,注释等

        在PHP中,反射是指在PHP运行状态中,扩展分析PHP程序,导出或者提取出关于类、属性、方法、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能,被称为反射API。

5.自定义容器类:

        如下图所示,我们将car类注入到person类中,通过person类的buy方法调用car类的pay方法

        我们的person类与car类

        大头的 Container类

        这里需要注意容器类的get方法(通过反射机制拿到类的构造函数,注入所需参数)

6. 分析tp5.1的容器类:

        这里居然需要到thinkphp目录下执行git checkout 5.1,否则Contaier.php不出现(我也是醉了)

        如下图所示,Container类实现了ArrayAccess接口(php内置接口:可以让对象像数组一样用中括号调用),IteratorAggregate(聚合式迭代器),Countable(php内置接口:继承Countable接口的可被用于count() 函数,就是可以这样写count($class)),以及反射类等

        下图为tp框架容器类源码(ps:跟明哥上面的demo差不多)

        从tp框架入口文件开始分析:

        详情请看明哥的源码注释。。

        最后的总结图:

        实际上这三者最后打印的内容都是等价的

相关文章

网友评论

      本文标题:TP5源码:IOC容器及Facade 深度解析(一)

      本文链接:https://www.haomeiwen.com/subject/ymilmctx.html