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下使用以下代码连接并测试
Apr 09 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
php利用gd库为图片添加水印
Nov 09 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 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
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
js 分栏效果实现代码
2009/08/29 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JavaScript 原型继承
2011/12/26 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
JavaScript链式调用实例浅析
2018/12/19 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
python实现简单井字棋游戏
2020/03/04 Python
python入门教程之基本算术运算符
2020/11/13 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
类、抽象类、接口的差异
2016/06/13 面试题
转党组织关系介绍信
2014/01/08 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
2016简单的租房合同范本
2016/03/18 职场文书