著名 php 开源框架 Zend Framework 经历了长达数年的开发,终于在 2012 年 9 月 5 日正式发布了2.0 版本,下简称 ZF2。时隔 Zend 1.0 版本的发布已经有 5 年之久。

php 的框架一直都是百家争鸣的,但是作为 php 官方运维的框架,Zend Framework 在 php 开发者中的流行度并不高。其一是由于 Zend Framework 主要面向大型应用,对代码规范以及程序结构有严格的规定,入门门槛较高。另一方面还是因为 Zend Framework 整体的执行效率偏低,略显笨重。

所以 Zend 小组本次可谓痛定思痛,ZF2 并不像其他框架只是修修补补的更新,而是完全重写了 ZF1 的所有代码,主打的口号就是“高性能”。

来看一看 ZF2 都带开了哪些新的特性:

  1. 模块化(ModuleManager)

比起 ZF1 来说,ZF2 原生支持模块的概念,任意第三方 php 程序,只要遵循 Zend 的编码规范和代码结构,都可以变成一个 Zend 模块。目前已经有一批试验阶段的模块出炉(参看ZF2 Modules)。 其中不乏像 Doctrine ORM 这样优秀的项目。

可以预见的是,随着 ZF2 的慢慢成熟,越来越多可以选择的模块将大量涌现,可能未来基于 ZF2 的项目开发,会像搭积木一样轻松简单。

  1. 事件驱动(EventManager)

传统程序中,代码都是按线性顺序执行的,所以开发中往往很难将一些功能独立为一个组件或模块。

事件驱动,或者也可以叫钩子(Hook),改变了普通程序流程化的运行方式,应用了事件驱动之后,程序将呈现“注册事件” => “触发事件”的跳跃式运行,可以在不影响原有程序代码的,很容易的在任意位置加入新的业务逻辑,让项目的开发变得极为灵活。

  1. 服务管理器(ServiceManager)

服务管理器的概念来自于"服务定位模式(Service locator pattern)"的编程思想。这种思想提倡将程序中的每一个独立功能提取出来作为一个“服务”,每一个服务都是独立可唤醒的,只有服务被调用时,服务相关的程序才会启动。

这也就是 ZF2 性能提升的秘密所在,ZF2 的 MVC 启动流程中无处不体现 ServiceLocator 的思想,功能模块的调用极为“吝啬”,想必会给以前对 Zend 性能有意见的开发者一个大大的惊喜。

  1. 依赖注入(Di Dependency Injection)

依赖注入广泛应用于 Java 的主流框架中,可以很好的解除大型应用中的耦合。ZF2 引入 Di 也经过了反复的考量和权衡,即使进入 beta 阶段,Di 仍然一度作为 ZF2 的基本实现方案,整个 Mvc 的配置基于 Di。最终为了避免陷入 Di 可能造成的元数据式编程泥潭(Metaprogramming), Di 只是作为 ZF2 的底层实现,上层加入了 ServiceManager。普通开发者在使用 ZF2 的过程中不需要接触到 Di 的层面。不过这并不妨碍 DI 作为一个优秀的 php 组件存在并发挥作用。

  1. 社会化编程

ZF2 的代码完全托管在 Github,借助 Github 的优秀设计,任何人都可以轻松的通过 fork 参与 ZF2 的项目建设,甚至提交新的模块功能。笔者AlloVince也帮助 Zend 小组修复了一些 BUG,发现 Zend 小组响应非常快(从没有超过 24 小时),对反馈的意见也会花时间认真解答。所以参与 ZF2 项目是参与 php 开源项目一个不错的选择。

# 总结

正如 ZF2发布信息中写到的,没有哪个框架是完美的,ZF2 也不例外。所以作为开发者要做的,不应该是纠结于哪个框架好哪个框架不好这种永远也得不到结论的问题,而是针对不同的项目选择合适的框架。

在现阶段,开发大中型 php 应用,特别是商业应用和企业应用,ZF2 是一个非常不错的选择,因为 ZF2 有严格代码规范,非常适合团队开发。而 ZF2 作为 Zend 官方的支持产品,整体的可靠性和 BUG 的响应速度也都是有保证的。

# 相关资源

最后对于有兴趣的朋友,欢迎访问ZF2 官方网站尝鲜。

笔者也整理出一些实用的ZF2 资源如下:

更全面的资源请参看Zend Framework 2.0 资料汇总

Tags :ZF2Zend Framework 2

Donate:Buy me a coffee|文章有帮助,可以请我喝杯咖啡