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 无限级数据JSON格式及JS解析
Jul 17 PHP
php模板函数 正则实现代码
Oct 15 PHP
PHP中soap的用法实例
Oct 24 PHP
php常见的魔术方法详解
Dec 25 PHP
8个PHP数组面试题
Jun 23 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
PHP实现批量上传单个文件
Dec 29 PHP
symfony2.4的twig中date用法分析
Mar 18 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
php json转换相关知识(小结)
Dec 21 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 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
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
javascript手工制作悬浮菜单
2015/02/12 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
Python中文字符串截取问题
2015/06/15 Python
Django内容增加富文本功能的实例
2017/10/17 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
Python实现壁纸下载与轮换
2020/10/19 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
校园之星获奖感言
2014/01/29 职场文书
企业形象策划方案
2014/05/29 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
行政处罚事先告知书
2015/07/01 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
JS class语法糖的深入剖析
2022/07/07 Javascript