ZF等常用php框架中存在的问题
程序员文章站
2023-02-17 10:21:54
从zend framework v0.13版本开始,我就开始学习使用zend framework。当时公司的一个项目也恰好用到了zend&nb...
从zend framework v0.13版本开始,我就开始学习使用zend framework。当时公司的一个项目也恰好用到了zend framework。到了0.6的版本之后就再没有关注细节了。前些日子听说zend 公司将在5月份正式推出zend framework,今天特意叫同学下载下来测试。
最新版本是0.93的,测试发现zf框架越来越傻瓜式了。很多东西都直接封装在zf的library里面。你只要知道如何调用就ok拉。和之前的版本详细的确有比较大的变化,也增加了比较多功能。
首先,zend.php不见了,取而代之的是一个zend_load类,放在load.php里面。
第二、库类的加载更加方便了。之前的zf要在子目录下使用是比较麻烦的。现在可以直接在子目录下使用,而且现在也可以不通过mod_rewrite来使用,可以通过http://path/to/site/controller/action来访问,类似我在《回答phpchina上的几个问题:url映射 》谈到的url映射。
第三、把试图直接集成到了controller里面,方便调用。不过有个不好的地方就是要按照zf的要求来规范程序的目录结构。
另外还增加了很多功能,比如说访问控制等等。总之,变化很大。今天晚上我也只是大概的看了下。
对于zf,cakephp等等框架,我觉得大家在学习的时候最好能明白框架的基本原理,所谓“万变不离其中”。框架本身就是很简单,完全没有zf等之类这样复杂,它们只是把细节处理很完善,同时要做到通用,规范、功能强大,所以就复杂了。关于框架的基本原理,我推荐大家上phpit.net上看一篇文章,关于如何使用php5搭建一个简单的mvc框架的(在喜悦国际村上有翻译),或者可以看看我的几篇文章《php实现mvc开发得最简单的方法》系列文章。
之前在chinaunix上有一个帖子,讨论在php项目中使用对象和过程的优势和不足,讨论的非常不错。有支持对象的,也有认为非对象的开发更加符合web开发的特点,有更好的性能。
我个人是非常支持对象式开发的,尤其在php5环境中(因为php5的对象和php4的对象完全不是一回事,这个看看zend 引擎就知道了)。但是帖子中说到的几点也很有道理:比如“oop的形式却无故要装入很多无关的函数”。web开发是非常强调性能的,而php是一种解释性语言,如果include过多的代码是很影响性能的。这个问题在zend framework,cackephp,fleaphp和我的框架phpbean中都存在。
比如说一个indexcontroller,这里使用zend framework做例子。代码如下:
<?
class indexcontroller extends zend_controller_action {
function init(){
$this->initview();
}
function indexaction(){
//echo 'index/index';
$this->view->title='hello world!';
$this->render();
}
function testaction(){
echo 'index/test';
}
function showaction(){
echo 'index/show';
}
}
?>
比如说我们访问index/index,那么testaction()和showaction()方法的内容就完全是多余的。在实际开发中按照这种思路,一般是一个功能模块对应一个controller,比如说用户就对应一个usercontroller,然后里面有登录、退出、注册、列表、详细显示等等多种方法。当一个项目一大的时候一个controller可能就几k到十几k。那这样的模式就非常的不好。
在java的struts中,就采用了完全不同的方式,他是一个action对应一个文件。我觉得这是一个很好的参考方法。
我觉得php5的话,使用面对对象更加何时。可以说面对过程能实现的,面对对象都能实现,而且可以实现的更好。但重要的一点是:采用面对对象的思维来使用面对对象,而不是用面对过程的思维来写面对对象的程序!
最新版本是0.93的,测试发现zf框架越来越傻瓜式了。很多东西都直接封装在zf的library里面。你只要知道如何调用就ok拉。和之前的版本详细的确有比较大的变化,也增加了比较多功能。
首先,zend.php不见了,取而代之的是一个zend_load类,放在load.php里面。
第二、库类的加载更加方便了。之前的zf要在子目录下使用是比较麻烦的。现在可以直接在子目录下使用,而且现在也可以不通过mod_rewrite来使用,可以通过http://path/to/site/controller/action来访问,类似我在《回答phpchina上的几个问题:url映射 》谈到的url映射。
第三、把试图直接集成到了controller里面,方便调用。不过有个不好的地方就是要按照zf的要求来规范程序的目录结构。
另外还增加了很多功能,比如说访问控制等等。总之,变化很大。今天晚上我也只是大概的看了下。
对于zf,cakephp等等框架,我觉得大家在学习的时候最好能明白框架的基本原理,所谓“万变不离其中”。框架本身就是很简单,完全没有zf等之类这样复杂,它们只是把细节处理很完善,同时要做到通用,规范、功能强大,所以就复杂了。关于框架的基本原理,我推荐大家上phpit.net上看一篇文章,关于如何使用php5搭建一个简单的mvc框架的(在喜悦国际村上有翻译),或者可以看看我的几篇文章《php实现mvc开发得最简单的方法》系列文章。
之前在chinaunix上有一个帖子,讨论在php项目中使用对象和过程的优势和不足,讨论的非常不错。有支持对象的,也有认为非对象的开发更加符合web开发的特点,有更好的性能。
我个人是非常支持对象式开发的,尤其在php5环境中(因为php5的对象和php4的对象完全不是一回事,这个看看zend 引擎就知道了)。但是帖子中说到的几点也很有道理:比如“oop的形式却无故要装入很多无关的函数”。web开发是非常强调性能的,而php是一种解释性语言,如果include过多的代码是很影响性能的。这个问题在zend framework,cackephp,fleaphp和我的框架phpbean中都存在。
比如说一个indexcontroller,这里使用zend framework做例子。代码如下:
<?
class indexcontroller extends zend_controller_action {
function init(){
$this->initview();
}
function indexaction(){
//echo 'index/index';
$this->view->title='hello world!';
$this->render();
}
function testaction(){
echo 'index/test';
}
function showaction(){
echo 'index/show';
}
}
?>
比如说我们访问index/index,那么testaction()和showaction()方法的内容就完全是多余的。在实际开发中按照这种思路,一般是一个功能模块对应一个controller,比如说用户就对应一个usercontroller,然后里面有登录、退出、注册、列表、详细显示等等多种方法。当一个项目一大的时候一个controller可能就几k到十几k。那这样的模式就非常的不好。
在java的struts中,就采用了完全不同的方式,他是一个action对应一个文件。我觉得这是一个很好的参考方法。
我觉得php5的话,使用面对对象更加何时。可以说面对过程能实现的,面对对象都能实现,而且可以实现的更好。但重要的一点是:采用面对对象的思维来使用面对对象,而不是用面对过程的思维来写面对对象的程序!