PHP 框架的应用级对象问题
一般不是初始化和配置之后,再路由分发到 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对象用处可大了:
- 测试:一个应用就是一个app对象,所以单元测试的时候只要创建app对象-测试-销毁app对象这样就可以很简单地搞定测试前的setup和测试后teardown;并且可以通过继承app对象,利用多态来打桩,单元测试轻松搞定。
- 避免全局变量:全局变量是邪恶滴~ 消灭全局变量~ 但是有很多配置是全局的怎么办?都塞到这个app对象里吧
- 通过不同类型的app对象,可以轻松改变程序对外的接口 -- 拿Yii框架来说,搞个CWebApplication则就是正常的web应用,换个CConsoleApplication就摇身一变——成了一个控制台应用,好神奇地说~
- 还没想出来...
类似的app对象一般是作为服务容器存在的,例如symfony2和mini型的silex,都是相同的概念,把一些实例化的对象啊配置项啊什么的塞到这个app对象里,那么只要你能访问app对象,就可以拿到这些东西,这种方式我很喜欢。
有个抽象出来的专门作为依赖注入容器的轻便库叫pimple,有时间你可以了解下。
上一篇: 千万级的数据库,该怎么优化呢
下一篇: 服务器php对外发包引起崩溃的解决办法
推荐阅读
-
魔术方法 - php简单操作数组和对象时候遇到的两个问题,一起请教各位了
-
解析php中session的实现原理以及大网站应用应注意的问题_PHP
-
php中解决各种应用的乱码问题
-
PHP5.2升级PHP5.3的问题
-
Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
-
Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
-
Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
-
Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
-
详解PHP的Laravel框架中Eloquent对象关系映射使用
-
解析ABP框架中的数据传输对象与应用服务