引言:
随着 Ruby on Rails 的火爆, PHP 这个流行的 web 应用脚本语言也出现了大量的新一代开发框架与此同时, 国内 PHP 开发者也开始紧跟国外发展, 推出了不同的开发框架
Ruby on Rails 催生变革
在 RoR 流行之前, PHP 领域也有不少开发框架, 例如 MojaviWACTPHPMvc 和 Seagull 等这些框架虽然也采用了 MVC 模式数据库抽象层等技术但由于当时 PHP 本身不像现在这样流行, 所以这些框架都没有得到大量应用, 最终归于沉寂
而在感受到 RoR 提供的快速开发能力后, PHP 社区像被注入了兴奋剂各种应用技术和开发框架层出不穷
新一代框架的诞生
PHP 社区在被 RoR 震晕后, 没有陷入过多的争论而是立即行动起来, 开始了新一代框架的设计首先出现的第一批框架几乎都是 RoR 的克隆例如 PHP on Trax(连名字都借鉴 Ruby on Rails) 和 TaniPHPAkelos 等这些框架最大的特点就是力求 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 开发框架才陆续发布
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 也没有找到帮助开发者分离应用程序领域逻辑的途径虽然有指导文档, 但对于初级开发者来说, 一个可以拿来就用的领域逻辑基础会显得很实用
反思与进取
RoR 带来的冲击波还远为平息, 但 PHP 开发者们已经在开始反思一味追随 RoR 的脚步是否真的能够为 PHP 开发带来质变?
RoR 之所以能够取得如此巨大的成功, 除了 RoR 本身的设计思想外, 还有一个重要原因就是 RoR 充分利用了 Ruby 这种语言的特长将 Ruby 动态语言的优势发挥得淋漓尽致而在 PHP 中如果只是单纯照搬 RoR 中设计, 则要处处遇到 PHP 语言本身的限制为了绕开这些限制, 开发者不得不用一些难以理解的技巧来解决问题但这样一来通常会导致框架的结构变得晦涩难懂性能受到损害
在这种反思中, Code IgniterFleaPHP 等框架就是对这个问题的最好回答只有充分利用 PHP 语言本身的优势, 才能真正让 PHP 开发变得更简单更有趣
发展到今天, 各种 PHP 开发框架虽然具有各自的特色, 但几乎都是为了提高开发效率而努力但是, 虽然其中部分框架注意到了提高应用程序可维护性的问题, 但都没有为领域逻辑分离这个至关重要的问题提出解决方案而这正是这些框架在未来的发展目标
对于简单的 Web 应用和复杂的企业应用, 两者之间的差别就注定了采用一种固定的架构是无法满足需求的因此像 FleaPHP 这样能够提供自定义架构能力的框架, 可以让开发者尝试用一个框架的不同组合来解决从简单到复杂的不同程度的需求
未来, PHP 将成为 Web 开发领域中越来越重要的平台因此我们相信会出现更多更好的开发框架虽然作为开发者来说, 并不一定需要采用某一个框架来解决问题但正是因为这些不断出现的框架, 我们对使用 PHP 开发 Web 应用的理解和把握得到了一次次的推动
来源: https://www.php1.cn/detail/php-5b0953fefc.html