PHP后端开发框架详解:优势与选择指南

发表时间: 2024-06-06 10:04

Zend 框架

优势:

Zend Framework大量使用了PHP5中新的面向对象特性:接口、异常、抽象类、SPL等等,这些东西的应用使得Zend Framework具有高度的模块化和灵活性。同时由于它严格遵循“面向接口编程”和“单一对象职责”的原则,Zend Framework极有可能成为一个优秀的企业应用开发框架。它是官方出品,自带了很多库。框架本身使用了很多设计模式来编写,架构很优雅,执行效率中等;MVC设计比较简单,具有路由功能,配置文件强大(可以处理XML和php INI),各种库功能很强大。它是所有PHP框架中最全面的,包括它不仅仅是一个框架,还是一个庞大的类库(取代了PEAR),这是它的主要特点;除了数据库操作外,它还能直观地支持Model层(比CodeIgniter和CakePHP强),可以很方便地使用Loader功能加载其他新添加的Class; Cache功能很强大,从前端Cache到后端Cache,后端Cache支持Memcache、APC、SQLite、文件等;数据库操作功能很强大,支持各种驱动(适配器)。文档很齐全,国内社区很成熟,目前很多Web 2.0网站都在用,学习成本中等。

缺点:

MVC功能性不强,View层实现简单(跟没实现一样),不能对前端页面进行很强大的控制。没有自动化脚本,创建一个应用,包括入口文件都要手动搭建,入门成本高。对于简单、小型的项目,Zend Framework不但不能提高开发效率,相反由于框架中大量应用了面向对象的设计和PHP5的新特性,对开发者提出了更高的要求,间接增加了项目的开发成本。对于较大的项目和企业应用,Zend Framework是很好的基础。不过作为成熟的大型PHP框架,还是需要一些努力的。

评价:

作为官方框架,Zend Framework 的野心是可以预见的,它想要挤垮其他框架,封装很多强大的库,提供一站式的框架服务。他们的开发团队非常强大,完全有能力开发出非常强大的产品。因此,如果再花点时间完善框架,Zend Framework 的未来基本是可以肯定的。同样,Zend Framework 的架构本身也相当优雅,这说明 Zend 的高手很多,设计理念比较先进,虽然有些功能还没有完全实现,比如 View 层、自动化脚本等,这些都依赖于未来的升级。总体来说,Zend Framework 是最值得期待的框架。当然,你在现在的项目中使用它也是完全没问题的。

CakePHP

优势:

CakePHP 是最类似 RoR 的框架,包括数据库操作的设计方法和 Active Record 方法;设计层面非常优雅,没有多余的库,所有功能都是纯框架,执行效率还不错;数据库层的 hasOne 和 hasMany 功能很强大,比较适合复杂的业务处理,路由功能和配置功能还不错,脚手架的自动构建功能很强大,适合中型应用,基本实现了 MVC 各层,并有命令行脚本自动运行功能。文档比较齐全,在国内也成功推广,大部分人都知道 CakePHP,学习成本中等。

缺点:

CakePHP 一个很严重的问题就是把 Model 解释为数据库层操作,严重影响了对数据库以外操作的能力。CakePHP 的缓存功能稍弱,配置功能稍弱;CakePHP 并不适合大型应用,只适合中型应用,对于小型应用来说,学习成本稍高。

评价:

总的来说,CakePHP 框架代表了 PHP 框架一个非常重要的时代和代表,目前也发挥着非常重要的作用。很多自己写的框架都模仿了 CakePHP 的做法,是一个里程碑式的产品。CakePHP 揭示了 RoR 敏捷的开发方式和以数据库操作为唯一模型的设计理念。是开发快速应用和原型的绝佳工具。同样,作为 Web2.0 网站的开发框架,也是一个值得选择的选择。

代码点火器

优势:

Code Igniter 崇尚“简单即是美”的原则,没有花哨的设计模式,没有华丽的对象结构,一切都是那么简单。几行代码就可以开始,再多几行代码就可以输出,可以说是“大道至简”的典范。配置简单,所有配置都使用 PHP 脚本配置,执行效率高;具备基本的路由功能,可以进行一定的路由;具备初步的布局功能,可以做出一定的界面美观度;数据库层封装良好,具备基本的 MVC 功能。快速简洁,代码量不多,执行性能高;框架简单易用,学习成本低,文档详细;自带很多简单易用的库,框架适合做小型应用。

缺点:

本身实现并不理想,内部结构过于混乱,虽然简单易用,但是缺乏扩展性,Model层简单理解为数据库操作,框架略显简陋,只能满足小型应用的需求,稍显无法满足中型应用的需求。

评价:

总体来说,使用CodeIgniter完成简单快速的应用还是很值得的,同时可以构造一定程度的布局,方便模板复用。数据操作层封装的很好,CodeIgniter没有使用太多复杂的设计模式,执行性能和代码可读性都不错。至于附加库也不错,简洁高效。

Symfony

优势:

symfony 是我所知道的最强大的 PHP 框架,也使用了很长时间,但还是没有发现它的很多功能。它完整实现了三层 MVC,把所有东西都封装了起来,包括$POST、$GET 数据,异常处理,调试,数据检测;它包括强大的缓存功能,自动类加载(这个功能很炫酷),强大的语言支持;它有非常强大的视图层操作,可以分片包含单个、多个文件;它有非常强大的配置功能,使用 yml 配置就可以控制所有的框架和程序运行行为,强大到让人无话可说;你可以随意定义自己的各种类,symfony 可以自动加载(auto load)这些类,并在程序中随意调用;它包括强大的多级项目和应用管理:Project --> Application --> Module --> Action,可以满足一个项目下多个应用的​​需求,每一层都可以定义自己的类库,配置文件,布局; 它有非常强大的命令行操作功能,包括创建项目、创建应用、创建模块、刷新缓存等。Symfony绝对是开发大型复杂项目的首选,因为使用Symfony会大大节省开发成本,而且多人协作时也不会有问题。在Project级别定义好基础Class后,任意模块都可以复用,大大提高了代码的复用率。

缺点:

Symfony 最大的问题是使用了太多风格各异的开源项目组合成一个框架。由于 Mojavi 和 Propel 都相当复杂,Symfony 的结构非常复杂,难以理解和学习。缓存功能无法掌控,每次开发调试总是要缓存,需要执行 symfony cc 和 symfony rc 来清除和重建缓存。效率不是很高,特别是解析模板和读取配置文件的过程,非常耗时。学习成本很高,而且在国内没有成熟的社区和文档,甚至连中文手册都没有。相应的,掌握所有功能需要花费大量的时间。

评价:

Symfony 绝对是企业级框架,唯一一个可以和 Java 领域那些强大的框架相抗衡的框架。强大的东西学习起来自然复杂,但是对项目开发也很有帮助,复杂项目自然推荐使用 Symfony,非常值得,后续维护成本比较低,复用性很强。如果用 Symfony 做相对复杂的互联网项目,那么就要考虑数据库分布的问题,这种情况下 Symfony 自带的数据库操作层就需要抛弃,需要自己定义。当然 Symfony 支持模型层的任意搭建。

ThinkPHP

ThinkPHP 速度快,借鉴了成熟的 Java 思想,但在实际使用中,一些基本的 CURD 相关操作居然有错误。ThinkPHP 基于 PHP5,充分利用了 PHP5 的特性,我最喜欢的还是 ThinkPHP 的数据验证和自动填充,但这也制约了 ThinkPHP,没有考虑加入自动统计字段等小功能。

ThinkPHP 还有自动生成数据的功能,但是这个不支持关联。唉,ThinkPHP 的功能和思路都很优秀,但是应用体验却很一般。号称 ThinkPHP 的文档是最丰富的,事实也确实如此,但是 ThinkPHP 的文档和示例太过一般,比如表关联只在模型中介绍了它的定义,其他的 CURD 操作都没有提到。

FleaPHP

FleaPHP 是一个用 PHP 开发的应用程序框架(全面支持 PHP4 和 PHP5),它为开发者提供了创建自己应用程序所需的基本功能和辅助组件,成熟、快速、功能丰富。但是在一些细节上不如 ThinkPHP 那么人性化。比如 url 函数,在 FleaPHP 中,url 函数的前两个参数是控制器和动作名称,而 ThinkPHP 则恰恰相反,因为有很多情况下只输入动作名称。而且在数据库操作中这样的参数安排也不如 ThinkPHP 那么人性化。FleaPHP 在数据操作方面非常强大,甚至可以操作中间表。FleaPHP 的文档和示例非常少,学习成本较高。但是一旦上手就非常简单。FleaPHP 框架的核心非常小,但是通过灵活的配置可以组合出各种类型的基础架构。对于简单的脚本页面,FleaPHP 不需要加载 MVC 模式,只需要为应用程序提供业务逻辑和数据库服务即可。 对于复杂的应用,FleaPHP 可以完成从 MVC 模式调用、权限控制、数据验证到文件上传、图片处理等各种任务。正是因为这种优秀的定制和扩展能力,FleaPHP 才真正接近“满足从简单应用到企业级开发的各种需求”的目标。而且与很多其他框架不同的是,FleaPHP 是一个在实际开发中完全精益求精的框架。作为完全国产的框架,FleaPHP 拥有完全中文的文档和代码注释,在扩展功能方面也非常注重国内开发者的实际需求。因此,与国外各种框架相比,FleaPHP 更容易被国内开发者接受。

全面的:

上述框架各有特色,都是开源项目。不过框架针对的项目不同,一般来说,CodeIngiter 更适合小型项目,CakePHP 和 Zend Framework 更适合中型项目,Symfony 更适合大型重量级项目。在选择项目时,要充分考虑框架的可定制性和可扩展性,因为对于每个项目,你无法确定是否会随着需求的变化而改变它。

相对而言,Zend Framework 和 Symfony 应对变化的能力强,尤其是可以随意定制模型层类,非常方便添加自己的业务或者数据处理类。个人建议在中大型项目中使用这些框架。CodeIngiter 和 CakePHP 在中小型项目中也能发挥主要作用,开发和原型化速度快,非常适合目标不明确的原型项目开发。ThinkPHP 框架是国内比较优秀的框架,功能强大,简单易学,设计灵活,秉承简洁的理念。如果太注重效率,就用 FleaPHP 吧。