为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 框架的应用级对象问题

PHP 框架的应用级对象问题

慕无忌1623718 2019-04-10 20:49:23
在看到Yii框架的时候,还有Discuz的源程序,喜欢在初始化和dispatch之前new一个application对象,这个对象有什么用吗?或者说有什么好处吗?一般不是初始化和配置之后,再路由分发到Controller/Action一级开始执行,为什么在这中间要多一层application对象呢?PHP执行完生命周期就结束了,不管是require/include/autoload到最后其实都相当于一个文件对吗?需要的全局参数我可以define/$_SERVER/$_ENV,需要的全局方法我可以publicstaticfunction,那上面说的那个application对象究竟有什么用处呢?
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

这个APP对象用处可大了:
测试:一个应用就是一个app对象,所以单元测试的时候只要创建app对象-测试-销毁app对象这样就可以很简单地搞定测试前的setup和测试后teardown;并且可以通过继承app对象,利用多态来打桩,单元测试轻松搞定。
避免全局变量:全局变量是邪恶滴~消灭全局变量~但是有很多配置是全局的怎么办?都塞到这个app对象里吧
通过不同类型的app对象,可以轻松改变程序对外的接口--拿Yii框架来说,搞个CWebApplication则就是正常的web应用,换个CConsoleApplication就摇身一变——成了一个控制台应用,好神奇地说~
还没想出来...
                            
查看完整回答
反对 回复 2019-04-10
?
临摹微笑

TA贡献1982条经验 获得超2个赞

类似的app对象一般是作为服务容器存在的,例如symfony2和mini型的silex,都是相同的概念,把一些实例化的对象啊配置项啊什么的塞到这个app对象里,那么只要你能访问app对象,就可以拿到这些东西,这种方式我很喜欢。
有个抽象出来的专门作为依赖注入容器的轻便库叫pimple,有时间你可以了解下。
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 366 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信