知识点目录:
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框架入口文件开始分析:
详情请看明哥的源码注释。。
最后的总结图:
实际上这三者最后打印的内容都是等价的