使用设计模式是为了,高内聚低耦合
耦合度是,如果代码都黏在一起了,牵一发而动全身,写代码不希望这样。经常需要改代码。尽可能的降低耦合度。
单例模式 配置类 session类 db类 缓存类
TP5.1 index.php laravel也是这样的,原理一样的
loader 注册类,自动加载机制,记载composer 和 think的基础类 通过IOC容器绑定单例
然后通过Container 容器类,执行IOC容器类
get方法,根据类名获取类,然后执行软方法
通过注册器,注册类。调用方法
框架的核心内容就是容器
门面设计模式
通过静态方法调用类的方法,__callstatic()
检查容器中是否有实例,如果有实例调用实例的方法,如果没有就通过容器的方式创建进行实例化,并调用。
call_user_func_array()
把第一个参数作为回调函数(callback
)调用,把参数数组作(param_arr
)为回调函数的的参数传入。
总结
Facade-->获取对应的类库-->调用facade的callstatic方法--->createFacade调用容器,有容器调用。没有容器:创建,存储实例,调用实例类库的方法
框架执行流程
当一入口文件index.php
加载基类文件basre.php
加载loader 文件,框架的灵魂。类的自动加载
不管什么框架第一步都是类的自动加载 spl_autoload_register
自身类加载think triaits 和 composer加载不同的文件加载
显示已加载所有的类,设置别名,并找到别名和类的映射关系
注册到注册树中去
然后在容器中获取app实例,并执行run方法。执行应用程序
初始化应用init
监听app init
相关绑定
监听 app_dispatch
路由检测
记录当前调度信息
监听app_begin
执行路由调度
中间件调度
监听app_end
send();