当前位置:Gxlcms > PHP教程 > PHP框架的应用级对象问题

PHP框架的应用级对象问题

时间:2021-07-01 10:21:17 帮助过:17人阅读

在看到 Yii 框架的时候,还有 Discuz 的源程序,喜欢在初始化和 dispatch 之前 new 一个 application 对象,这个对象有什么用吗?或者说有什么好处吗?

一般不是初始化和配置之后,再路由分发到 Controller/Action 一级开始执行,为什么在这中间要多一层 application 对象呢?

PHP 执行完生命周期就结束了,不管是 require/include/autoload 到最后其实都相当于一个文件对吗?需要的全局参数我可以 define/$_SERVER/$_ENV,需要的全局方法我可以 public static function,那上面说的那个 application 对象究竟有什么用处呢?

回复内容:

在看到 Yii 框架的时候,还有 Discuz 的源程序,喜欢在初始化和 dispatch 之前 new 一个 application 对象,这个对象有什么用吗?或者说有什么好处吗?

一般不是初始化和配置之后,再路由分发到 Controller/Action 一级开始执行,为什么在这中间要多一层 application 对象呢?

PHP 执行完生命周期就结束了,不管是 require/include/autoload 到最后其实都相当于一个文件对吗?需要的全局参数我可以 define/$_SERVER/$_ENV,需要的全局方法我可以 public static function,那上面说的那个 application 对象究竟有什么用处呢?

这个APP对象用处可大了:

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

类似的app对象一般是作为服务容器存在的,例如symfony2和mini型的silex,都是相同的概念,把一些实例化的对象啊配置项啊什么的塞到这个app对象里,那么只要你能访问app对象,就可以拿到这些东西,这种方式我很喜欢。

有个抽象出来的专门作为依赖注入容器的轻便库叫pimple,有时间你可以了解下。

人气教程排行