在看到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就摇身一变——成了一个控制台应用,好神奇地说~还没想出来...
临摹微笑
TA贡献1982条经验 获得超2个赞
类似的app对象一般是作为服务容器存在的,例如symfony2和mini型的silex,都是相同的概念,把一些实例化的对象啊配置项啊什么的塞到这个app对象里,那么只要你能访问app对象,就可以拿到这些东西,这种方式我很喜欢。有个抽象出来的专门作为依赖注入容器的轻便库叫pimple,有时间你可以了解下。
添加回答
举报
0/150
提交
取消