浅析十款PHP开发框架的对比


Posted in PHP onJuly 05, 2013

PHP开发框架近来在PHP社区中成为讨论的热点,几乎每天都在推出新的框架。面对市面上超过四十种的开发框架,你很难判断究竟哪一款最适合你,尤其是在这些框架所提供的功能不尽相同的时候。 

概览
以下你看到是这十款开发框架的一览表,列举了他们各自所提供的功能。
#1:
表示框架是否内建模型-视图-控制器。
#2: 表示框架是否无需修改即可支持多数据库。
#3: 表示框架是否支持对象记录映射器,通常这是ActiveRecord的封装包。
#4: 表示框架是否包含其它数据库对象,比如TableGateWay。
#5: 表示框架是否内建模板引擎。
#6: 表示框架是否缓存对象或者其他缓存机制。
#7: 表示框架是否内建校验或过滤组件。
#8: 表示框架是否内建Ajax支持。
#9: 表示框架是否内建用户验证模块。
#10: 表示框架是否包含其他模块,例如RSS feed解析器、PDF模块或其他实用模块。 

Zend Framework
Zend Framework 尽管从对比表上来看它没占到什么便宜,可Zend Framework确确实实涵括了一些处理PDF文档、RSS源、在线服务(Amazon, Flickr, Yahoo)的模块,甚至更多。Zend Framework同时也包含了数个不同的数据库对象,极大地便捷了对数据库进行查询的实现,甚至免去你手写SQL查询脚本的麻烦。

当前,Zend Framework并未完全支持ORM,但是开发人员仍然陷入在是否要添加ORM层的争论中。也许在将来会实现这些功能,你就可以编写自己的ORM封装包,投稿到社区,并有机会将之整合入框架的未来版本。

Zend Framework看上去前途一片光明,而且它同时又修正了一些常见的PHP问题。也许稳定版本就可以在对比表里面表现得更出色了! 

CakePHP
CakePHP是一款高级的MVC框架,自带了不多的几个模块。它可以处理大多数的数据库事务,支持Ajax个数据验证。同时,它的用户验证模块(Accsee List)也非常独特,可以针对不同的用户在访问网站不同部分时分配对应的访问权限。

尽管CakePHP的网站看上去令人犯晕,但是框架本身已经比较完整可用了。截至成文尚未见稳定版本,实在令人感到有点意外,毕竟已经开发了好几个月了,不过我猜想也许用beta版本来开发产品也未尝不可吧

Symfony Project
从对比表中不难看出,Symfony是一款极具扩展性的开发框架,它甚至完整植入了一个叫做Propel的ORM,Propel也是开源项目,并且迄今为止可能是PHP上最好的ORM解决方案。Symfony同时还整合了用于数据库抽象层的Creole和用于MVC模型层的Mojavi。由于它仅仅是重用了这些项目的源代码,而非重写,由此使得框架具备了极为强大的扩展性,这一点在表中昭然若是。

Symfony有两个缺憾,以使它不支持PHP4,这是由于需要PHP5中很多新特性的支持的结果,二是相对来说它有点复杂了。大多数任务,比方像分页,在Symfony中的时限比其他框架要复杂得多,这决不是一款简洁著称的框架。 

Seagull Framework 
Seagull framework看上去相当不错,自带了很多特性。支持PHP4也对它的推广相当有利,我本人就仍在使用PHP4,况且大多数空间寄存商尚未全面支持PHP5。

不幸的是,Seagull没有提供对Ajax的支持,实在有点说不过去,不过通过Google可以毫不费力地搜索到一篇自己添加Ajax支持的教程,而且这点在将来应该会添加到框架中。 

WACT - Web Application Toolkit
WACT很有潜力,框架的基件它一应俱全,像MVC、数据库对象和模板引擎,不过仅此而已。它没有任何外挂模块,同时也缺少一些内建的功能,例如Ajax、缓存、验证模块,等等。

尽管如此,WACT还是拥有最好的模板引擎,甚至可以帮助你创建自己的模板标签来扩展功能。 

Prado
Prado非常独特,它提供了一些很酷的特性。它没有内建对MVC的支持(就我看来),但是它确实拥有处理大多数PHP任务的各种各样的组件,更棒的是,它实现了事件驱动脚本。例如,在一个HTML按钮上设置onClick事件链接到一个PHP函数。这点近似ASP.NET,而Prado确实包含了更多的ASP.NET组件,像GridView和Repeater Control。

仅凭对比表上的数据,Prado看似要弱于其它框架,但事实并非如此。因为Prado如此独特,尽管它得分不高,但是在实际应用中它是非常强大的。 

PHP on Trax
这个框架看上其简直就是Ruby and Rails在PHP上的一个接口,它以前也确实叫做PHP on Rails。不幸的是,它的文档实在是太稀缺了,所以也很难判断这个框架究竟提供了些什么,但是文档中的确提到了ActiveRecord,所以它可能提供ActiveRecord,就像RoR。还有就是它内建了Ajax支持,从它网站上的两个演示视频中不难看出。

PHP on Trax基本上能符合使用者对框架的要求,但是它还是缺胳膊少腿,比方像验证模块和缓存模块。它也没有任何外挂模块,是以目前来说,它很初级。 

ZooP Framework
ZooP Framework可以说包罗万象,对比表上一目了然,差不多该支持的都支持了,除了ORM层。更意外惊喜的是它支持PHP4,这对于它提供的这么全面的功能来说实在是太不简单了,太棒了!

ZooP还提供了内建的GUI控制,使得创建表单的工作变得异常快捷。它支持绝大多数的常用表单元素,在常规HTML里使用GUI控制的好处就是你可以将验证的逻辑操作和GUI控制紧密地结合在一起。 

eZ Components
与其说ez Components是个框架,不如说是一个组件集,可能正是因为如此它并没有内建对MVC的支持。

它包括了大多数常用组件,如数据库组件和缓存组件,可还是缺少点东西。比方说,没有ActiveRecord组件和验证组件。另一方面,它提供了一些外挂组件,比如e-mail组件,但是不多,其它框架(像Zend Framework)提供的更多。 

CodeIgniter 
CodeIgniter相对来讲是个很新的框架,它的作者是ExpressionEngine的开发团队(译者注: PHP blog程序pMachine的升级换代产品,很可惜不是免费的),看上去很有潜质。不幸的是,它尚不能处理多数据库,尽管这项功能仍在开发中。

它源于Ruby on Rails,所以它提供了很多的相同功能,比如scaffolding(代码自动生成)。它的文档编得相当棒,甚至还有视频教程帮助你快速上手。 

获胜者是...
在这里我不得不非常遗憾地宣布,无人胜出。每个框架所提供的功能特性不尽相同,因此无人完胜。一如往常,最后这将取决于个人偏好和选择。我极力推荐你在作出决定前先认真仔细地研读各个框架的文档,剩下就靠你自己判断了。

就个人而言,我的确非常喜欢Zend Framework,但当我仔细研究了每个框架之后,我发现了很多有趣的功能,比方说Prado的事件,抑或Symfony的ORM封装包。

当你实在是无法决定选择哪个框架的时候,你仍可以选择像大多数人那样: 自己动手。虽然耗时费力,但是乐趣无穷。

如开始所言,一部分框架已经有了长足的更新,而我最近比较倾向于symfony,它充实的文档令到上手非常方便,但是它的庞杂也令到开发小项目,甚至像我这样的个人迷你项目的过程有点得不偿失,也许CodeIgniter的简洁在这方面已经足够。

PHP 相关文章推荐
ftp类(example.php)
Oct 09 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
配置php网页显示各种语法错误
Sep 23 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
PHP文件缓存类示例分享
Jan 30 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
lnmp安装多版本PHP共存的方法详解
Aug 02 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 PHP
利用PHP实现短域名互转
Jul 05 #PHP
PHP 安全检测代码片段(分享)
Jul 05 #PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 #PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 #PHP
PHP系统命令函数使用分析
Jul 05 #PHP
解析PHP实现下载文件的两种方法
Jul 05 #PHP
国外十大最流行的PHP框架排名
Jul 04 #PHP
You might like
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
Track Image Loading效果代码分析
2007/08/13 Javascript
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
EM算法的python实现的方法步骤
2018/01/02 Python
python求最大连续子数组的和
2018/07/07 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
Django的models中on_delete参数详解
2019/07/16 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
秘书岗位职责
2013/11/18 职场文书
大学生见习报告范文
2014/11/03 职场文书
农村党员干部承诺书
2015/05/04 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
成人成长感言如何写?
2019/08/16 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android