thinkphp运⾏机制和优缺点
thinkphp⾸先设置⼀些常量、然后运⾏Think对象(系统环境),装载think的运⾏环境,包括:⾃动加载、异常处理、功能核⼼等。环境准备好后,运⾏App对象(应⽤程序),App对象会调⽤调度者(dispatcher)解析⽤户请求,然后通过反射机制实现控制器的访问(控制器的前置操作和后置操作),控制器中,通过⾃动加载机制访问model和其他层的功能,通过display调⽤View(视图类),渲染视图。具体情况如下图:
应⽤模式和状态:
应⽤模式可以⽀持不同运⾏环境的切换。我们只需要配置不同环境独⽴的配置⽂件,然后设置相应的常量便可。
应⽤模式设置常量APP_MODE:define('APP_MODE','sae');
状态配置设置常量APP_STATUS:define('APP_STATUS','office')
thinkphp配置⽂件的加载顺序:
ThinkPHP/Conf/convention.php
Application/Common/Conf/config.php
Application/Common/Conf/config_应⽤模式名称.php
ThinkPHP/Conf/debug.php
Application/Common/Conf/debug.php
Application/Common/Conf/office.php //状态配置
Application/当前模块名/Conf/config.php
Application/当前模块名/Conf/config_应⽤模式名称.php
Application/当前模块名/Conf/应⽤状态.php
(没有定义相应常量则不加载)
当然,我们也可以通过扩展配置来添加⾃⼰的配置⽂件
1. // 加载扩展配置⽂件
2. 'LOAD_EXT_CONFIG' => 'user,db',
php如何运行代码多层MVC:
模块化设计思想。也是主要运⽤thinkphp的原因。thinkphp是模块/控制器/操作:Movice/Index/index的理念,他可以先分⼤的模块,模块⾥⾯在实现独⽴的mvc,当然模块⾥⾯还可以实现复杂的逻辑层、数据层等复杂结构的划分,
只需要通过D函数加参数访问,如:D('UserLogic', 'Logic')访问的就是逻辑层。
驱动机制:
驱动思想的添加,让我们可以在框架上扩展⾃⼰的引擎实现。我们只需要在config⾥⾯配置相应的选项,就可以实现⾃⼰的引擎实现。类似于⼯⼚模式。驱动机制的结构如图:
下⾯是⼀个模板引擎扩展的⽰例:
⽂件内容:
钩⼦机制:
类似于观察者模式。通过配置⽂件,把⾏为挂到Hook类上,然后,当代码出发钩⼦的标签时,运⾏挂在到该标签上的所有⾏为。如下图:
这种思路的加⼊,可以打破程序死板流程的限制,做⼀些独⽴⾏为,通过此种⽅式调⽤。
CBD模式:
核⼼---⾏为-驱动的分层。就是上⾯说的钩⼦机制和驱动机制,整个框架按照这三块来分层,以便提供⽐较多的可扩展⽅式。
thinkphp的问题:
1.架构不灵活。thinkphp⾃⼰实现了全⾃动化运⾏,这样导致,你必须按照他的解析流程运⾏代码,在他规定的框架内实现,有很⼤的局限性,例如单元测试的添加,新的运⾏流程的实现,
2.⼤量使⽤全局常量。thinkphp中⼤量使⽤了全局常量,这导致使⽤它的类依托于全局变量的设置,损失了类本⾝的封装性,造成⽐较⾼的耦合态。
3. 细节代码质量不⾼。thinkphp作为⼀个框架,整体架构设计还是挺合理的,但具体代码写的真是⽔平不⾼。建议好好研究细化。
4. 环境强制准备太多,也影响运⾏速度。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论