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 相关文章推荐
一个PHP+MSSQL分页的例子
Oct 09 PHP
Cakephp 执行主要流程
Mar 24 PHP
php中设置index.php文件为只读的方法
Feb 06 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
PHP Hash算法:Times33算法代码实例
May 13 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
PHP中静态变量的使用方法实例分析
Dec 01 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 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
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python脚本实现查找webshell的方法
2014/07/31 Python
Python 正则表达式的高级用法
2016/12/04 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python中单例模式总结
2018/02/20 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
python 星号(*)的多种用途
2020/09/21 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
采购内勤岗位职责
2013/12/10 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis