Php Zend framework

http://framework.zend.com/

Zend Framework的设计构思形成于2005年,由Ruby on Rails和Spring Framework的设计思路发展而来的。2005年10月,第一次Zend年会上,Zend公司宣布了ZF的开发计划。[2]

2007年7月1日,Zend Framework 1.0发布。[3]

2012年9月5日,Zend Framework 2.0正式版发布。[4]

Zend Framework特征包括[13]

  • 所有组件完全面向对象,符合E STRICT错误报表。
  • 松耦合(Use-at-will)设计可以让开发者独立使用组件,每个组件几乎不依赖其他组件。
  • 默认提供了强壮而高效的 MVC 实现和基于PHP的模板。
  • 支持多种数据库,如MySQL,Oracle,IBM DB2,Microsoft SQL Server,PostgreSQL,SQLite和Informix Dynamic Server。
  • 支持多种邮件收发系统,如mbox,Maildir,POP3和IMAP4
  • 灵活的缓存机制,支持多种缓存方式,可以将缓存写入内存或是文件系统。

创建Zend Framework应用

创建一个Zend Framework应用程序可以通过zf tool工具,以命令行的方式来搭建一个典型的应用结构,然后在此基础上进行开发,这种自动化创建应用结构的方法通常也被称为“脚手架”功能。Zend Framework曾被普遍认为学习曲线较高,上手比较难,但zf tool"脚手架"大大简化了应用的创建和初始配置过程,如果配合上安装好的Zend Studio环境,使框架可以在短短数分钟之内就可以完成配置运行起来。

代码、文件的测试标准

所有贡献的代码,在加入到发行版本之前,都必须先通过ZF公司制订的严格的测试标准。所有代码必须符合ZF代码标准,单元测试达到80%以上的的测试覆盖率。[14]

争议

和其他大型 Web 框架类似,Zend Framework 有一个非常庞大的 前端控制器 (Front Controller) 。但由于 PHP 运行时环境的特殊性(每次请求都是独立的上下文),这个前端控制器不得不在每次请求被重新初始化一次。这带来了非常大的性能开销,被认为是 Zend Framework 的性能瓶颈所在。同时由于前端控制器模式和 PHP 的格格不入,许多人甚至认为 PHP 不适宜使用大型框架。类似的还有 Zend_Db 获取数据库中表的结构信息,也是每次请求都重复进行的操作。事实上,Zend_Db 是可以缓存表结构的(通过 Memcached、Apc 一类的外部缓存器)。但前端控制器设计的复杂确实不是缓存可以解决的。这并不说明 Zend Framework 设计有问题,而是说明并不是所有的项目、应用都适合使用 Zend Framework ,要靠项目决策者针对自身情况权衡。

模仿

Zend Framework 本身的结构很大程度的模仿了 Ruby on Rails,但又做了足够的改动使其适应 PHP 的特点。所以很多 PHP 框架都或多或少的借鉴、参考了 Zend Framework。由于不满 Zend Framework 中前端控制器重复初始化带来的不必要开销,甚至有开发者用 C/C++ 写 PHP 扩展的方式,重新实现了 Zend Framework ,使前端控制器只需要全局初始化一次(Yaf Framework及Phalcon PHP)。



北京时间9月5日,著名php开源框架Zend Framework2.0版本正式对外发布(简称:ZF2)。据了解,一直以来,php的框架可以说是百家争鸣。Zend Framework是由 Zend 公司支持开发的完全基于 PHP5 的开源PHP开发框架,可用于开发 Web 程序和服务,ZF采用 MVC(Model–View-Controller) 架构模式来分离应用程序中不同的部分方便程序的开发和维护。利用 PHP 自身特性,Zend Framework 有很高的易用性和强大的功能。它提供了先进、健壮和安全的开发网站的解决方案。

 

Php Zend framework_第1张图片


    事实上,一直以来,作为php官方运维的框架,Zend Framework在php开发者中的流行度并不高。这主要存在两个方面的原因,其一主要是因为Zend Framework主要面向大型应用,对代码规范以及程序结构有严格的规定,入门门槛较高。第二个原因,就是由于Zend Framework整体的执行效率偏低,略显笨重。


  而在本次发布的Zend Framework2.0版本之中,Zend小组可以说是在这一方面也下足了功夫。据了解,ZF2并不像其他框架只是修修补补的更新,而是完全重写了ZF1的所有代码,主打的口号就是“高性能”。


  一起来了解一下,ZF2都为我们带开了哪些全新的特性与不一样的体验:

  1:模块化(ModuleManager)

  据了解,本次发布的新版本,与此前的ZF1相比,可以说在模块化方面有了极大的优化提升。其可以原生支持模块的概念,任意第三方php程序,只要遵循Zend的编码规范和代码结构,都可以变成一个Zend模块。目前已经有一批试验阶段的模块出炉(参看ZF2 Modules)。 其中不乏像Doctrine ORM这样优秀的项目。

  我们上此不难推断,随着ZF2的慢慢成熟,越来越多可以选择的模块将大量涌现,可能未来基于ZF2的项目开发,会像搭积木一样轻松简单。

  2:服务管理器(ServiceManager)

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

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


   3:事件驱动(EventManager)

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

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


  4:社会化编程

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


  5:依赖注入(Di Dependency Injection)

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



  其实,就像ZF2在其发布信息中所介绍的那样,到现在为止,还没有哪一个框架是完美的,ZF2也不例外。所以作为开发者要做的,不应该是纠结于哪个框架好哪个框架不好这种永远也得不到结论的问题,而是针对不同的项目选择合适的框架。在现阶段,开发大中型php应用,特别是商业应用和企业应用,ZF2是一个非常不错的选择,因为ZF2有严格代码规范,非常适合团队开发。而ZF2作为Zend官方的支持产品,整体的可靠性和BUG的响应速度也都是有保证的。





你可能感兴趣的:(Php Zend framework)