20070228 php mvc 框架
http://www.yippeesoft.com
呕吐代码与framework [ 2006/10/21 22:53 &line; by mlsx ]
写PHP也有一段时间了,也写了不少代码,深刻认识到,每次都是再重复编码,一点重用性都没有,功能也差不多,特别是在对数据库操作上,查找,修改,删除三条SQL语句满天飞舞。感觉一点技术含量都没有,完全是体力劳动而不是脑力劳动。难道没有好的办法来重用这些代码吗?或者能找到一个尽量书写可重用的代码的方法。
后来php framework有了一定的发展,去google搜索“php framework”,你能发现不少相关内容,其实zend framework下载到我的硬盘上已经有一段时间了,但是看了一下官方站点的的api展示和说明,却步了,觉得这肯定不会想当年学PHP那样,看一天就能上手的,估计有太多的概念需要去了解。
feng4ever弃暗投明,转向学习PHP,人家起点就是比我高,他喜欢弄一些高层的东西,底层编码就算了,于是像我推荐了cakephp,并给出了几条优点,当然官方站点给出了更多的好处。抱着试一试的态度下载了源代码,折腾了半天,算是运行起来了,但是还没有搞清楚,如何开始做开发,应该是我对MVC模式的不了解吧。
也看了一些其他的framework,什么seagull php framework, zoop framework, php on trax,还有就是国人开发的fleaphp,都是一头雾水,虽然很多都有演示,不过大部分都是在演示AJAX功能,我想这不应该是MVC要重点表现的地方吧。
估计目前手头的这个php开发项目还是只能采用原始码代码的方式了,等了解了MVC以后再考虑吧。
[转载][翻译]十款PHP开发框架横向比较
原文地址: http://plod.popoever.com/archives/001110.html
这篇文章已经有些日子了,现在因为自己的开发需要想选一款容易上手的PHP Framework,所以重新找了出来,看完以后顺便翻译了一下,由于原文是写于今年三月底,故而其中的很多框架的现状也发生了较大的变化,本篇译文也只是方便大家阅读,对于正在寻找这方面资料的读者做个参考,也给自己一个知识备份……
引子
PHP开发框架近来在PHP社区中成为讨论的热点,几乎每天都在推出新的框架。面对市面上超过四十种的开发框架,你很难判断究竟哪一款最适合你,尤其是在这些框架所提供的功能不尽相同的时候。
本文将引导你遍览十款最热门最流行的开发框架,并对它们作出横向比对。我会先列出一张所有框架的一览表,而后我们将对它们逐个简述。
概览
以下你看到是这十款开发框架的一览表,列举了他们各自所提供的功能。
#1: 表示框架是否内建模型-视图-控制器。
#2: 表示框架是否无需修改即可支持多数据库。
#3: 表示框架是否支持对象记录映射器,通常这是ActiveRecord的封装包。
#4: 表示框架是否包含其它数据库对象,比如TableGateWay。
#5: 表示框架是否内建模板引擎。
#6: 表示框架是否缓存对象或者其他缓存机制。
#7: 表示框架是否内建校验或过滤组件。
#8: 表示框架是否内建Ajax支持。
#9: 表示框架是否内建用户验证模块。
#10: 表示框架是否包含其他模块,例如RSS feed解析器、PDF模块或其他实用模块。
如果上表所列有不当之处,敬请斧正。
Zend Framework
Zend Framework还相当新,尚处在beta阶段(译者注: 相对于作者写这篇文章之时),因此还有些功能有待完整(比方说用户验证模块),但它本身已经有不少功能了。尽管从对比表上来看它没占到什么便宜,可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版本来开发产品也未尝不可吧(译者注: Risk you @ss baby!)。
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封装包。
当你实在是无法决定选择哪个框架的时候,你仍可以选择像大多数人那样: 自己动手。虽然耗时费力,但是乐趣无穷。
如果你有任何问题或留言,随时欢迎在下方的评论表单中留言,或者加入到PHPit论坛的讨论中来。同样,如果以上图标或文章有不当之处,敬请斧正。
如开始所言,一部分框架已经有了长足的更新,而我最近比较倾向于symfony,它充实的文档令到上手非常方便,但是它的庞杂也令到开发小项目,甚至像我这样的个人迷你项目的过程有点得不偿失,也许CodeIgniter的简洁在这方面已经足够。
CakePHP(http://www.cakephp.org/)
CakePHP充满了RoR的影子,从ActiveRecord模式到视图的布局管理都和RoR非常相似。而且CakePHP一开始也尝试实现与 RoR一样的许多东西。但CakePHP的开发团队后来发现PHP语言和Ruby语言存在巨大区别,因此RoR中的许多设计即便能够在PHP中实现,也是 缺乏实用价值的。
CakePHP在发展中逐步走出了RoR的阴影,开始探索更能发挥PHP语言本身优势的架构和实现。因此有一段时间CakePHP的API发生了剧烈的变化,以致其他开发者纷纷停下脚步处于观望状态。
但由于前期一些架构的不合理和对RoR太多的模仿,导致CakePHP的核心部分越来越难以理解,运行性能也不尽人意。而且CakePHP将一个庞大的数据库操作对象作为所有业务对象的基础。这虽然利于快速开发,但却导致对业务逻辑对象的测试非常困难。
对于较小型的项目,CakePHP非常理想。出色的快速开发能力、丰富的API和详尽的文档都可以帮助开发者很快完成工作。但随着项目规模的增加,CakePHP的局限性也变得突出。
Symfony(http://www.symfony-project.com/)
Symfony是一个非常成熟的框架,大量利用了已有的开源项目。Symfony使用Mojavi的核心代码实现了框架的MVC模式,利用 Propel作为数据库抽象层。Symfony不仅功能强大,而且对Ajax有全面的支持。加上官方网站提供的大量文档和教程,并拥有一个活跃的社区,因 此受到许多开发者的欢迎。
但是,Symfony最大的问题也在于使用了太多风格迥异的开源项目来组合成框架。由于Mojavi和Propel本身都相当复杂,因此Symfony的结构非常复杂,难以理解和学习。
不过对于希望选择一个框架作为企业内部系统基础架构的企业来说,Symfony的成熟度、丰富的文档和活跃的社区都是值得考虑的。毕竟企业内部系统更为看重的是稳定性和长期的支持。
Zend Framework(http://framework.zend.com/)
Zend Framework大量应用了PHP5中面向对象的新特征:接口、异常、抽象类、SPL等等。这些东西的应用让Zend Framework具有高度的模块化和灵活性。同时,因为严格遵循“针对接口编程”和“单一对象职责”等原则,让Zend Framework很有希望成为一个出色的企业应用开发框架。
但不幸的是Zend Framework直到今天,也没有做出更多的突破。在使用Zend Framework开发时,框架对应用程序自身最重要的领域逻辑分离没有提供任何帮助。如果希望开发出真正健壮的企业应用,仍然需要开发者做出相当的努 力,并且在Zend Framework之上建造自己的基础设施。
针对这点,批评者指出Zend Framework虽然大量应用PHP5的新特征,但却没有将这些相对于PHP4的优势转化为能够为开发者提供帮助的东西。
对于简单和小型的项目来说,Zend Framework不但不能提高开发效率。反而因为在框架中应用了大量面向对象设计和PHP5的新特征,对开发者提出了更高的要求,间接增加了项目的开发 成本。而对于较大的项目和企业应用,Zend Framework倒是一个不错的基础。但要创建一个成功的应用,仍然需要付出不小的努力。并且要时刻注意Zend Framewok的性能问题。
Code Igniter(http://www.codeigniter.com/)
Code Igniter可以说是一匹黑马。Code Igniter出现之时正是Symfony和CakePHP大行其道、Zend Framework万众期待的时刻。可凭借着独特的设计思想,Code Igniter吸引了大批开发者。这点从其火爆的官方论坛就可得到证实。
Code Igniter推崇“简单就是美”这一原则。没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单。几行代码就能开始运行,再加几行代码就可以进行 输出。大部分日常开发中用到的东西都可以立即找到,并且可以很容易的使用。Code Igniter可谓是“大道至简”的典范。
但是,Code Igniter本身的实现不太理想。内部结构过于混乱,虽然简单易用,但缺乏扩展能力。因此在发展到1.5系列版本时,作者不得不通过增加各种hooks来为框架提供扩展能力。
FCS(http://fcs.org.cn/)
FCS是从Java的Struts结构移植过来的中文PHP开发框架,使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,借 鉴了国外一些不错的思想,尤其是Java框架方面,因此熟悉Java的开发人员相对比较容易上手,其模版引擎、缓存机制、认证机制和扩展性方面均表现不凡。
在借鉴国外优秀思想的同时,FCS也更多地考虑了国内的应用开发需要。PHP4兼容、完全支持UTF-8,以及PATHINFO支持等,更加有利于国 内的主机环境和开发需要。秉着易用和易扩展的原则,FCS采用容易理解的项目、模块和操作机制加上内置的一些自动化操作方法,让应用开发变得更加简单,其 功能可以通过基类库以及各种插件的形式灵活扩展,从而满足日益增长的业务需求。正是因为具备良好的开发结构,使得FCS在开发大型应用的时候并不会显得有 很多障碍,基于构件的方式,以及配合框架的项目管理机制同样可以让你在处理大型应用的时候一展所长。
FCS力求精简的代码和全中文化的文档、注释,有利于国内PHP开发人员学习和掌握,不过根据目前的情况来看,官方的文档和社区支持目前还比较缺乏,而且对Ajax的支持还不够全面,因此国内的应用成熟度还不够。
FleaPHP(http://www.fleaphp.org/)
FleaPHP从发展上看,是一个具有一定历史的框架。在过去三年中,FleaPHP是作者发布了从PFC1到PFC3系列和flea1试验框架后,推出的第一个真正成熟、稳定的开发框架。
与许多其他框架不同,FleaPHP设计之初,就是围绕快速开发和充分利用PHP自身优势两个重点展开的。因此FleaPHP最大的特点就是极高的模块化程度和扩展能力。
FleaPHP框架的核心非常小,但通过灵活的配置,可以组合出各种类型的基础架构。对于简单的脚本页面,FleaPHP不需要载入MVC模式,只需 要为应用程序提供业务逻辑和数据库服务。而对于复杂的应用程序,FleaPHP可以完成从MVC模式调用、访问控制、数据验证到文件上传、图片处理等各种 各样的任务。
正是因为这种出色的定制和扩展能力,FleaPHP真正接近了“满足从简单应用到企业开发的各种需求”这个目标。而且与许多其他框架不同, FleaPHP是一个完全在实际开发中精炼出来的框架。因此伴随着FleaPHP的发展,各种各样的实际应用也相继出现。在FleaPHP官方网站上,可 以看到各种各样的实际应用。从最简单的企业宣传网站,到复杂的社区网站、企业内部系统等等,不一而足。
FleaPHP作为一个完全国产的框架,具有完全中文化的文档、代码注释,并且在扩展功能上也注重考虑国内开发者的实际需求。因此相对于国外的各种框架,FleaPHP更容易被国内开发者所接受。
但是,也正因为处在国内,FleaPHP面临比国外同行多得多的困难。缺乏足够的贡献者、无礼的责难,以及充满怀疑的眼光,这些都让FleaPHP的 开发团队成员需要更多的奉献精神。而且由于缺乏足够的贡献者,FleaPHP框架目前在文档和扩展功能方面,与其他成熟框架相比还有不小的差距。
并且与其他所有的PHP开发框架一样,FleaPHP也没有找到帮助开发者分离应用程序领域逻辑的途径。虽然有指导文档,但对于初级开发者来说,一个可以拿来就用的领域逻辑基础会显得很实用。
FleaPHP
成熟的应用程序开发框架 —— 国产FleaPHP
如今的FleaPHP的确是”成熟”了.以前我下载的FleaPHP,没有运行成功过,于是就放弃了.后来又见到zendframework,同样没运行成功,让人饱受打击.
直到后来遇到codeigniter,这个codeigniter只需你下载回来,就有个index.php让你运行,立刻运行成功!所以我选择了codeigniter.
codeigniter成功的奥秘,就在于”赢在起跑线上”—-如今的zendframework依然’失败’,因为依然没有index.php一点就可以运行的入口.
现在,回到FleaPHP上来.如今FleaPHP提供了index.php,你只需一点击,它就可以开始运行—这个就是”赢在起跑线上”的特征–第一印象绝对重要.所以,我又看到FleaPHP的使用手册和例子后,那么无疑的,我确信,FleaPHP成熟了.
PHP框架(framework)大观
Deminy.net
PHP框架(framework)大观
星期一, 十月 30. 2006
我在TOM工作期间,曾考虑编制一个PHP框架,用于提高PHP开发效率。后来去掌通公司工作后,这个思路得以初步实现,并具体地运用在“NEC Dream”这个手机服务网站中。
随后,我便长时间地脱离PHP代码编写第一线。在随后的日子里,我有时像个品酒师,评测别人写的程序;有时候则像个小学生,从别人的程序中学习新方法、新思路、新观点。
最近,我打算动手用PHP做些东西,需要有一套省心的PHP框架。
显然,我不打算从头开始写起,写一套自己的PHP框架;我也不打算借用自己过去的一些程序,因为那些程序现在看来有各种不足。
因此,我打算找一个开源的PHP框架,或者借鉴某一成功PHP程序的框架,在此基础上开发自己需要的PHP系统。
照套某一成功PHP程序(例如Serendipity等)的框架是比较困难的。因为这些PHP程序的需求都是非常特定的,其框架欠缺足够的灵活性,不一定适合我的需要。
因此,比较可行的方法还是找一个现成的PHP框架。
这个PHP框架至少需要有如下几个鲜明特点:性能出色、使用模版引擎、支持Ajax、架构清晰、使用简单、较为完美的多编码支持等等。
我曾在《"Ruby on Rails"技术观后感 (2)》一文中列出了去年5个主要的"PHP on Rails"技术。1年后再看看文中提到的这几个PHP框架,Biscuit、TaniPHP的开发目前似乎陷于停滞状态,似乎只有PHP on TRAX、CakePHP、Symfony这三个还可以考虑。其中,CakePHP、Symfony受到的追捧明显高于别的框架。在明年第一季度,将各有一本分别针对这2个PHP框架的书出版。1
到底哪一个PHP框架对我最合适呢?
2006年3月,Dennis Pallett写了一篇文字《Taking a look at ten different PHP frameworks》(瞅瞅10个不同的PHP框架)。文中对10个PHP框架作了比较,并附了图表分析和个人评价,有相当的参考价值。Dennis认为,CakePHP没有明显的缺点;Symfony融合了好些别的开源项目,功能强大,但好些任务(例如分页)处理起来比较复杂;Seagull是另外一个功能强大的PHP框架,但欠缺官方的Ajax支持……
Fabien Potencier是CakePHP的爱好者。2006年5月,他写了一篇文字《Rails-inspired PHP frameworks》(源于Rails的PHP框架),对主流的一些“PHP on Rails”框架作了比较,并对每个框架都有他个人的点评,同样具有相当的参考价值。在他看来,CakePHP虽然没有官方的国际化支持,也没有发挥PHP5的全部潜力,但相当简单易用;Symfony功能过于强大,而且结构过于复杂;PHP on Trax特点不鲜明,基本上只是照本宣科复制Ruby on Rails的概念而已……
CodeScripts网站的“PHP Framework”网页提供了对各种PHP框架的打分。从中可以看出,CakePHP和Symfony分别得到6.6和6.5的高分,而且二者受到众多读者的关注,分别有172和103个读者对其打分。2
最终,我认为:CakePHP最符合我的需要。需要提醒的一点是:符合我目前胃口的东东不一定适合你。
历史博文
- 20081126 flash play - 2009
- 20071029 java cldc midp - 2008
- 【公告】免费提供Gmail 邀请 - 2006
- OEpartner OE伴侣 - 2005