标签归档:Zend framework

Zend Framework框架最小化类库

使用Zend Framework半年多了,越发觉得它设计巧妙使用灵活,
团队协作用Zend Framework开发中型项目真是很惬意的事情。
但是总能明显感觉每次请求比codeigniter之类的轻量级框架慢,消耗的系统资源也多。
于是抽空跟踪了一下Zend Framework的核心文件,
加载了一个Zend/Application.php竟然会牵连10个模块,
也就是说,在配置好数据库,不加载任何类库的情况下,
初始化一次请求至少需要加载10个类库。

即 Zend Framework 框架的最小化类库。
清单如下:
Application
Config
Controller
Db
Exception
Filter
Layout
Loader
Registry
Uri
View

这些类库一共需要284个文件,至少占用空间2M,
如果这些文件全部读入内存,那得消耗多少内存和资源?

zend framework 框架中自定义父控制器

今天简单的聊聊ZF框架中的控制器。
大家都知道ZF中不可以使用__construct()构造方法,类的初始化操作需要用init()方法完成,
原因大部分朋友都应该了解,在php中,当子类有构造方法时,父类的构造方法不会被调用,
通过阅读zend/controller/Action.php的__construct()可以知道,它通过使用$this->init(),类似注入的方式,避免了这种情况。
那么在一个项目中,若干的controller可能会做一些同样的动作,比如初始化session、实例化一些对象等等,
如果在每个controller的init()中,写一些重复的代码,当controller比较多时,一来比较麻烦,二来不方便后期维护。
怎样解决这个问题呢?可以把这些代码写到一个文件中,然后include(),也可以OOXX,但我不认为这是个好办法,我的方法是,自定义一个父控制器。
例如:在library目录中新建一个Mylib/Controller/Parent.php文件,让这个文件继承zf的Controller,这样写:
class Mylib_Controller_Parent extends Zend_Controller_Action
{
public function init()
{
parent::init();
// Your custom code
}
}
以后在每个项目controller中不要继承ZF的默认控制器了,直接继承我们自己的Parent:
class DefaultController extends Mylib_Controller_Parent
{
public function init()
{
parent::init();
// Your custom code
}
}
就是这么简单。 😉
第一篇关于Zend Framework的文章,没什么技术含量,以后我会把项目中常用到的、实用的ZF经验技巧写下来,谢谢大家支持。