PHP是国内外流行的开源服务器脚本开发语言。能满足大、中、小项目的发展需求。在本文中,我们将介绍几种主流的PHP框架及其相对的优缺点,并与朋友们分享,作为参考。
主要引用的PHP框架包括CodeIgniter、CakePHP、ZendFramework和Symfony。我没有认真用过很多框架,只是简单的尝试了一下。很多观点可能不成熟,也可能是错误的。请指正,一起成长。
用户指南
优点:
1.配置简单,所有配置都是用PHP脚本配置的,执行效率高;具备基本的路由功能,能够进行一定程度的路由;具有初步的Layout功能,可以做出一定程度的界面外观;数据库层封装良好,具有基本的MVC功能。
2.快速简洁,代码少,执行性能高,PHP框架简单,使用方便,学习成本低,文档详细;该框架有许多简单易用的库,适合小型应用程序。
缺点:
1.简单地将模型层理解为数据库操作。
2.PHP框架有点简单,只能满足小型应用的需求,不能满足中型应用的需求。
评估:
总的来说,使用CodeIgniter完成简单快捷的应用是值得的,同时可以构造一定程度的布局,方便模板的复用。数据操作层封装良好,CodeIgniter没有使用很多复杂的设计模式,所以它的执行性能和代码可读性都很好。至于附库,也不错,简单高效。
CakePHP
优点:
1.CakePHP是最类似于RoR的PHP框架,包括数据库操作的设计模式和Active Record模式;设计层次优雅,没有多余的库,所有功能都是纯框架,执行效率还不错。数据库层的hasOne、has很多功能都非常强大,适合复杂的业务处理。路由功能和配置功能还不错;自动脚手架非常强大;适合中型应用;基本实现了MVC的每一层;具有自动操作命令行脚本功能;
2.文件比较完整,已经在国内推广成功。大部分都懂CakePHP,学习成本适中。
缺点:
1.cakephp非常严重的问题是将Model理解为数据库层操作,严重影响了数据库之外的操作能力。
2.CakePHP的缓存功能略弱,配置功能略弱。CakePHP不适合大规模应用,而只适合中型应用。对于小规模应用,学习成本略高。
评估:
总的来说,CakePHP框架代表了一个重要的时代,是PHP框架的代表,目前发挥着重要的作用。我自己写的很多框架都是模仿CakePHP的方式,这是一个里程碑式的产品。CakePHP揭示了RoR的敏捷开发方法和数据库操作是唯一模型的设计思想。Cakephp是开发快速应用程序和原型的优秀工具。同样,Web2.0网站的开发框架也值得选择。
Zend框架
优点:
1.正式生产,有很多库,框架本身是用很多设计模式编写的,架构优雅,执行效率中等;在MVC设计中,它简单,具有路由功能,强大的配置文件(能够处理XML和php INI),以及强大的库,这些都是所有php框架中最全面的,包括它不仅是PHP框架,还是一个大型类库(代替PEAR),这是它的主要特点;可以直观的支持除数据库操作之外的Model层(比CodeIgniter和CakePHP更强),可以轻松使用Loader函数加载其他新添加的Class;缓存非常强大,从前端Cache到后端Cache都支持,而后端Cache支持Memcache、APC、SQLite、file等。数据库操作功能非常强大,支持各种驱动(适配器)。
2.文件在国内社区是完整和成熟的。目前很多Web 2.0网站都在使用,学习成本适中。
缺点:
1.MVC功能较弱,View层实现简单(就像没有实现一样),不能很有力地控制前端页面。
2.没有自动化脚本,所以创建应用程序,包括条目文件,必须手动构建,并且条目成本很高。
3.Zend Framework是一个中等规模的应用程序框架,对于大规模的应用程序几乎不能作为PHP框架使用。但是作为一个成熟的大规模PHP框架,还需要一定的努力。
评估:
作为一个官方生产的框架,Zend Framework的野心是可以预见的,它想排挤其他框架,同时封装了很多强大的类库,可以提供一站式的框架服务。而且他们的开发团队足够强大,能够开发出功能强大的产品,所以基本可以肯定Zend Framework的未来大有可为。如果花更多的时间来改进框架。同样,Zend Framework本身也很优雅,这说明Zend官方有很多大师和先进的设计理念,虽然有些功能没有完全实现,比如View层、自动化脚本等。这取决于未来的升级。总的来说,Zend框架是最受期待的PHP框架。当然,目前你把它放入你的项目中绝对没有问题。
Symfony
优势
1.Symfony是我知道的最强大的PHP框架,我用了很久,但是很多功能还没有挖掘出来;它完整地实现了MVC三层,封装了一切,包括$_POST、$_GET数据、异常处理、调试功能和数据检测。包含强大的缓存功能,Class的自动加载(这个功能很酷),强大的i18n国有化支持;具有非常强大的视图层操作,可以逐段包含单个文件;非常强大的配置功能,使用yml配置可以控制所有框架和程序的运行行为,强大到让人无语;它可以自由定义自己的各种类,symfony可以自动加载这些类,并在程序中自由调用。它包含强大的多级项目和应用管理:项目-应用-模块-动作,可以满足一个项目下多个应用的需求,每一层都可以定义自己的类库、配置文件和布局;非常强大的命令行操作功能,包括构建项目、构建应用、构建模块、刷新缓存等;
2.Symfony绝对是开发大型复杂项目的首选,因为使用Symfony会大大节省开发成本,多人协作的时候也不会有问题。在项目级别定义了基本类之后,任何模块都可以重用,代码也可以大量重用。
缺点:
1.数据库操作模型使用了重量级的propel和creole,但是在我测试的版本中它们已经被移到了addon,所以它们可以使用也可以不使用。
2.缓存功能无法控制,每次开发调试总是缓存。需要执行symfony cc、symfony rc来清除和重建缓存。
3.效率不是很高,尤其是解析模板和读取配置文件的过程,耗费大量时间;
4.学习成本很高,国内没有成熟的社区和文档,连中文手册都没有,要掌握所有功能需要很多时间。
评估:
Symfony绝对是一个企业级的PHP框架,唯一一个看起来可以和Java领域的一些强大框架抗衡的东西;难学的东西自然复杂,但对项目开发也有帮助。自然,建议使用Symfony来处理复杂的项目,这是值得的。后期维护成本相对较低,复用性强。相应的,如果复杂的互联网项目要用Symfony,那么数据库分布的问题也要相应的考虑,所以有必要抛弃Symfony的数据库操作层,自己定义。当然,Symfony支持随意构建模型层。
摘要
以上PHP框架各有特点,都是开源项目。然而,框架所针对的项目是不同的。一般来说,CodeIngiter更适合小型项目,CakePHP和Zend Framework更适合中型项目,Symfony更适合大型重量级项目。在选择项目时,我们应该充分考虑框架的定制性和可扩展性,因为每个项目都不能确定你是否会随着需求的变化而变化。
相对来说,Zend Framework和Symfony应对变化的能力很强,尤其是能够随意定制模型层的Class,这使得添加自己的业务或数据处理类非常方便。我个人推荐大中型项目使用的PHP框架。
CodeIngiter和CakePHP在中小型项目中也能发挥重要作用,开发和原型构建都很快,非常适合目标不明确的原型项目开发。