ZF等常用php框架中存在的问题


Posted in PHP onJanuary 10, 2008

从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的话,使用面对对象更加何时。可以说面对过程能实现的,面对对象都能实现,而且可以实现的更好。但重要的一点是:采用面对对象的思维来使用面对对象,而不是用面对过程的思维来写面对对象的程序! 

PHP 相关文章推荐
计数器详细设计
Oct 09 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
基于PHP静态类的原罪详解
May 06 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
如何使用PHP给图片加水印
Oct 12 PHP
PHPExcel 修改已存在Excel的方法
May 03 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
PHP封装的分页类与简单用法示例
Feb 25 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
逐步提升php框架的性能
Jan 10 #PHP
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 #PHP
php扩展ZF――Validate扩展
Jan 10 #PHP
set_include_path在win和linux下的区别
Jan 10 #PHP
php模板之Phpbean的目录结构
Jan 10 #PHP
Phpbean路由转发的php代码
Jan 10 #PHP
php框架Phpbean说明
Jan 10 #PHP
You might like
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
javascript来定义类的规范小结
2010/11/19 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
大学生职业生涯规划范文
2014/01/22 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
顶撞老师检讨书
2014/02/07 职场文书
《雨霖铃》听课反思
2014/02/13 职场文书
简易版租房协议书范本
2014/10/13 职场文书
见习报告格式范文
2014/11/08 职场文书
光荣之路观后感
2015/06/12 职场文书
草房子读书笔记
2015/06/29 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
全新239军机修复记
2022/04/05 无线电
Tomcat配置访问日志和线程数
2022/05/06 Servers
JavaScript实现音乐播放器
2022/08/14 Javascript