PHP的开发框架的现状和展望






PHP开发框架的现状和展望

/google 的广告条-->

引言:


  随着Ruby on Rails的火爆,PHP这个流行的Web应用脚本语言也出现了大量的新一代开发框架。与此同时,国内PHP开发者也开始紧跟国外发展,推出了不同的开发框架。

Ruby on Rails催生变革

  在RoR流行之前,PHP领域也有不少开发框架,例如Mojavi、WACT、PHPMvc和Seagull等。这些框架虽然也采用了MVC模式、数据库抽象层等技术。但由于当时PHP本身不像现在这样流行,所以这些框架都没有得到大量应用,最终归于沉寂。
  而在感受到RoR提供的快速开发能力后,PHP社区像被注入了兴奋剂。各种应用技术和开发框架层出不穷。

新一代框架的诞生

  PHP社区在被RoR震晕后,没有陷入过多的争论。而是立即行动起来,开始了新一代框架的设计。首先出现的第一批框架几乎都是RoR的克隆。例如PHP on Trax(连名字都借鉴Ruby on Rails)和TaniPHP、Akelos等。这些框架最大的特点就是力求100%克隆RoR,不管是采用的架构、设计模式,还是使用方法。
  这几个框架一开始确实吸引了开发者的注意,但随着开发者的深入了解,这些框架头上的光环逐步褪色。晦涩难懂的架构、糟糕的性能,以及太多的限制,让这些框架难以在实际项目中运用。
  此时,许多PHP开发者认为可以借鉴RoR的设计思想,但不应照搬RoR的结构和实现。为此,一些同样推崇快速开发的框架开始在PHP社区出现。这些框架中,CakePHP和Symfony可谓佼佼者。

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的成熟度、丰富的文档和活跃的社区都是值得考虑的。毕竟企业内部系统更为看重的是稳定性和长期的支持。

商业利益与大道至简

  看到PHP开发框架的潜在商业价值后,Zend.com联合IBM宣布将要推出一个真正能够发挥PHP优势的开发框架。一时间,这个消息在整个PHP社区引起了地震。大家都开始期盼这个具有“官方”背景的开发框架能够为PHP开发者指出一条正确的道路。
  不过世事难测,就在Zend Framework团队公布几个代码片断后,立即就有开发者指出这些代码片段是不可能实现的。事实证明这些代码片段不过是美好的理想。限于PHP语言本身的能力,Zend Framework最终没有实现当初承诺提供的类似RoR中ActiveRecord模式的实现品。

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来为框架提供扩展能力。

国内PHP开发框架

  国内虽然过去也曾有开发者发布过一些框架,但这些框架要么太过简单,要么和某一类型的应用紧密耦合,缺乏通用性。直到进入2006年,随着PHP在国内的大量应用和追捧,真正的国产PHP开发框架才陆续发布。

FCShttp://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也没有找到帮助开发者分离应用程序领域逻辑的途径。虽然有指导文档,但对于初级开发者来说,一个可以拿来就用的领域逻辑基础会显得很实用。

反思与进取

  RoR带来的冲击波还远为平息,但PHP开发者们已经在开始反思一味追随RoR的脚步是否真的能够为PHP开发带来质变?
  RoR之所以能够取得如此巨大的成功,除了RoR本身的设计思想外,还有一个重要原因就是RoR充分利用了Ruby这种语言的特长。将Ruby动态语言的优势发挥得淋漓尽致。而在PHP中如果只是单纯照搬RoR中设计,则要处处遇到PHP语言本身的限制。为了绕开这些限制,开发者不得不用一些难以理解的技巧来解决问题。但这样一来通常会导致框架的结构变得晦涩难懂、性能受到损害。
  在这种反思中,Code Igniter、FleaPHP等框架就是对这个问题的最好回答。只有充分利用PHP语言本身的优势,才能真正让PHP开发变得更简单、更有趣。

  发展到今天,各种PHP开发框架虽然具有各自的特色,但几乎都是为了提高开发效率而努力。但是,虽然其中部分框架注意到了提高应用程序可维护性的问题,但都没有为领域逻辑分离这个至关重要的问题提出解决方案。而这正是这些框架在未来的发展目标。
  对于简单的Web应用和复杂的企业应用,两者之间的差别就注定了采用一种固定的架构是无法满足需求的。因此像FleaPHP这样能够提供自定义架构能力的框架,可以让开发者尝试用一个框架的不同组合来解决从简单到复杂的不同程度的需求。

  未来,PHP将成为Web开发领域中越来越重要的平台。因此我们相信会出现更多更好的开发框架。虽然作为开发者来说,并不一定需要采用某一个框架来解决问题。但正是因为这些不断出现的框架,我们对使用PHP开发Web应用的理解和把握得到了一次次的推动。

--------------------------------------

PS:此文原作者为FleaPHP 开发者之一.感谢其为国内PHP作出的贡献

您可能感兴趣的文章:

  • PHP开发框架总结收藏
  • 浅析十款PHP开发框架的对比

Tags:PHP的开发框架的现状和展望

相关文章

  • 2016-04-04各种快递查询--Api接口
  • 2007-03-03手把手教你使用DedeCms的采集的图文教程
  • 2007-06-06PHP5.2下chunk_split()函数整数溢出漏洞 分析
  • 2007-05-05什么是MVC,好东西啊
  • 2006-12-12怎样才能成为PHP高手?学会“懒惰”的编程
  • 2008-09-09什么是phpDocumentor
  • 2011-07-07PHP多个版本的分析解释
  • 2011-02-028个出色的WordPress SEO插件收集
  • 2008-08-08超级全面的PHP面试题整理集合
  • 2009-08-08PHP 开源框架22个简单简介

最新评论

(0)

相关推荐

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

    PHP开发框架近来在PHP社区中成为讨论的热点,几乎每天都在推出新的框架.面对市面上超过四十种的开发框架,你很难判断究竟哪一款最适合你,尤其是在这些框架所提供的功能不尽相同的时候. 概览 以下你看到是这十款开发框架的一览表,列举了他们各自所提供的功能. #1: 表示框架是否内建模型-视图-控制器. #2: 表示框架是否无需修改即可支持多数据库. #3: 表示框架是否支持对象记录映射器,通常这是ActiveRecord的封装包. #4: 表示框架是否包含其它数据库对象,比如TableGateWay

  • PHP开发框架总结收藏

    开发框架WACT http://wact.sourceforge.net/老牌的PHP编程框架,实现了很多企业级的开发模式 Horde http://www.horde.org/horde/提供了一些常用类库,可以满足参数处理.数据压缩.浏览器检测.链接跟踪以及 MIME.需要PEAR类库的支持,提供了API参考. Seagull http://seagull.phpkitchen.com/ 推荐一个面向对象的PHP开发框架,使用了Pear类库,其主要特性有:运用组件方式.简化数据访问.错误处理

  • PHP的开发框架的现状和展望

    PHP开发框架的现状和展望 /google 的广告条--> 引言: 随着Ruby on Rails的火爆,PHP这个流行的Web应用脚本语言也出现了大量的新一代开发框架.与此同时,国内PHP开发者也开始紧跟国外发展,推出了不同的开发框架. Ruby on Rails催生变革 在RoR流行之前,PHP领域也有不少开发框架,例如Mojavi.WACT.PHPMvc和Seagull等.这些框架虽然也采用了MVC模式.数据库抽象层等技术.但由于当时PHP本身不像现在这样流行,所以这些框架都没有得到大量应

  • Go 微服务开发框架DMicro设计思路详解

    目录 背景 概述 架构 设计理念 面向接口设计 会话 Session 消息 Message 协议 Proto 编码 Codec 连接 Socket 有机的组合 插件 Plugin 组件 未来展望 背景 DMicro 诞生的背景,是因为我写了 10 来年的 PHP,想在公司内部推广 Go, 公司内部的组件及 rpc 协议都是基于 swoole 定制化开发的.调研了市面上的各种框架,包括 beego,goframe,gin,go-micro,go-zero,erpc 等等,可能是我当时技术能力有限,

  • ABP(现代ASP.NET样板开发框架)系列之二、ABP入门教程详解

    ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate ABP 的由来 "DRY--避免重复

  • 基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用

    在上篇基于BootStrap Metronic开发框架经验小结[一]框架总览及菜单模块的处理,介绍了Bootstrap开发框架的一些基础性概括,包括总体界面效果,以及布局.菜单等内容,本篇继续这一主题,介绍页面内容常用到的数据分页处理,以及Bootstrap插件JSTree的使用. 在数据的界面显示当中,表格数据的展示以及分页是非常常见的处理操作,利用Bootstrap的样式布局,以及JQuery的Ajax数据处理,就能很好实现数据的动态展示和分页处理. 1.列表展示和分页处理1)数据的列表展示

  • Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

    先给大家展示下效果图: 扫描内容是下面这张,二维码是用zxing库生成的 由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java package com.zxing.activity; import java.io.IOException; import java.util.Vector; import android.app.Activity; import android.content.Intent; import

  • 基于MVC4+EasyUI的Web开发框架之附件上传组件uploadify的使用

    1.上传组件uploadify的说明及脚本引用 Uploadify 是 JQuery 一个著名的上传插件,利用 Flash 技术,Uploadify 越过浏览器的限制,控制了整个上传的处理过程,实现了客户端无刷新的文件上传,这样就实现了在客户端的上传进度控制,所以,你首先要确定浏览器中已经安装了 Adobe 的 Flash 插件. Uploadify 当前有两个版本,基于 Flash 是免费的,还有基于 HTML5 的收费版,我们使用免费版,当前版本为v3.2.1. 这个组件需要Jquery库的

  • 利用ASP.NET MVC+EasyUI+SqlServer搭建企业开发框架

    我们要搭建的框架是企业级开发框架,适用用企业管理信息系统的开发,如:OA.HR等 1.框架名称:sampleFrame. 2.搭建原则:最少知识原则. 3.先定义一个简单的编码规范:除类名和接口名外,其余首字母小写. 4.准备开发环境:vs2010及以上(mvc4).sqlserver.jquery2.0和easyui1.4.5 首先来看一下列表页面的效果图: 我们期望简洁带前台代码,如下: <table id="dataGrid" class="easyui-data

  • 基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理

    在很多系统模块里面,我们可能都需要进行一定的数据交换处理,也就是数据的导入或者导出操作,这样的批量处理能给系统用户更好的操作体验,也提高了用户录入数据的效率.本文基于Bootstrap的框架基础上,再对这个模块进行更新处理,以及Office文档或者图片等附件的查看处理. 1.数据的导入操作 一般系统模块里面,都有数据导入和导出操作,因此在界面自动生成的时候,我都倾向于给用户自动生成这些标准的查询.导入.导出等操作功能,界面效果如下所示. 导入操作,在Bootstrap框架里面,我把它作为一个层的

  • Bootstrap每天必学之前端开发框架

    BootStrap学习从现在开始,前端开发框架Bootstrap,可大大简化网站开发过程,从而深受广大开发者的喜欢.本文总结了Bootstrap之所以广泛流传的11大原因.如果你还没有使用Twitter Bootstrap,建议你去了解一下.小编也是最近才有所发现的,不过有更好的消息,在前两天微软发布的VS2013正式版中,也已经将BootStrap3.0的版本加入了额,连微软都看到bootStrap的强大,而且它的确很不错,所以我也不得不学习. bootstrap深受广大屌丝喜爱的原因到底是什

  • 基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用

    在上篇基于BootStrap Metronic开发框架经验小结[二]列表分页处理和插件JSTree的使用,介绍了数据的分页处理,使用了Bootstrap Paginator插件,另外对树形列表,采用了JSTree插件,本篇继续介绍在编辑页面中常用到的控件Select2,这个控件可以更加丰富传统的Select下拉列表控件,提供更多的功能和更好的用户体验. 1.Select2控件介绍 这个插件是基于Select的扩展插件,能够提供更加丰富的功能和用户体验,它的github官网地址为:https://

随机推荐