PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP开源 >> PHP开源框架 >> 

Zend Framework 2 初探

Zend Framework 2 初探

来源:phperz.com  作者:phper  发布时间:2012-03-15
新一代的PHP框架Zend Framework 2 诞生了,它基于Zend Framework 1,仅支持PHP 5.3,它将在未来一年里取代其旧版本。 初探 因为熟悉Zend Framework 1,我决定进入2.x beta版本,看看有什么变化,并测试对已有的程序是否有影响。 Rob Allen写过一个 教程 很适合那些从没

新一代的PHP框架Zend Framework 2 诞生了,它基于Zend Framework 1,仅支持PHP 5.3,它将在未来一年里取代其旧版本。

 

 

初探

因为熟悉Zend Framework 1,我决定进入2.x beta版本,看看有什么变化,并测试对已有的程序是否有影响。

Rob Allen写过一个教程很适合那些从没用过Zend Framework框架的人。你可以通过git克隆(或下一个zip包)来安装框架,并增加一些应用模块。

如果你想玩一个已经写好的框架程序,那么一个包含了实现数据库表的CRUD模块的程序,比起仅仅是“HelloWorld”的程序要好很多。

框架之所以好,是因为它已经包含一些功能模块及.htaccess。所以你只需要在Apache上配置,就可以运行起来。以前,一个新手在创建程序之前都要先配置好Zend Framework 1,我不敢说第一次使用Zend_Tool和ZF都是那么简单。

现在让我们来看看新框架的变化 - 目录结构:

view source
print?
1 Application/
2     config/
3     src/
4     views/

每个模块代码(类)都是从配置和视图模板中分离的,而不是强迫分开于控制器、模型、服务和其他对象。

这也意味着,理论上你想去掉在一个应用模块,只需要去掉一个单独的文件夹。但这并不意味着模块之间没有关联,例如:两个步骤的视图布局,就可以指定使用其他的模块。这只需要将两个模块的配置合并成一个。

 

新标准

作为一个新的主要版本,该框架也采用新标准,并中断对之前版本的兼容性,就像Symfony 2。

1.仅支持PHP 5.3,使用类的命名空间,不再使用下划线来分隔虚拟包。

2.采用PSR-0 autoloading,所有模块都在src/文件夹下,所以不再匹配类名和文件名。

3.不再有接口后缀的命名。

4.异常采用接口,所以PHP 5.3的异常是由一个模块继承和实现的(例如:Zend\Json\Interface)。

5.不再有下划线前缀来强调私有(private)和保护(protected)的属性和方法。

从上述可见,新标准并没有带来什么革命性的标志,而是它让Coder在写新代码的时候减少了一些负担的。

 

不完全轻量

配置有点长,但控制得当:例如,键名'di',在一个模块的配置文件中包含所有的类及参数。可能有人觉得整个框架变得意外的复杂了,但我们不得不接受,为了使用其全部的特性。

另一个点,我觉得有必要提的是Module.php的配置。它被定义成自动加载的模式,这是很标准的做法。这样我们就不会苦恼于如何加载它们。

控制器相对于Zend Framework 1变得轻量了:它们在注入对象的时候可以指定setter,而不是去搜索周围的对象。这并不是一个什么神奇的功能:因为你可以在配置中指定setter的列表,并将引导你去思考它们的关联性及数量。总的来说控制器减轻了,甚至(理论上)可实例化。

Action返回一个视图模型,所以使他们不需要知道视图对象:

view source
print?
01 class AlbumController extends ActionController
02 {
03     /**
04      * @var \Album\Model\AlbumTable
05      */
06     protected $albumTable;
07   
08     public function indexAction()
09     {
10         return array(
11             'albums' => $this->albumTable->fetchAll(),
12         );
13     }
14   
15     public function setAlbumTable(AlbumTable $albumTable)
16     {
17         $this->albumTable = $albumTable;
18         return $this;
19     }   
20 }

与1.x的相似点

一些惯例和API与Zend Framework 1一致,这意味着你不需要再次学习它们:

1.控制器的API及其助手:在控制器里你可以获得请求,及其他混合特征,如重定向。

2.表单允许定义元素(标签、验证和过滤器),并在子类中提供的初始化方法init()。

3.视图通常遵循文件夹结构<controller>/<action>.phtml;同样$this可调用escape()和url()等视图变量。

基本数据库的支持也是基于Table Data Gateway 类及其扩展。当然你可以选择整合Doctrine2或其他ORMs。

总结

请注意下面的问题:为什么我要使用Zend Framework 2来替代Symfony 2?
提供一个观点:ZF2相对于使用Zend Framework 1的程序来说,有更简单容易的代码升级方式,并且你已经有了ZF的使用经验。此外,它的设计并不落后于Symfony,而且不用全部重写。


延伸阅读:
Zend Guard 与 ionCube 代码加密工具比较
DeZender对用Zend Encoder加密过的PHP文件反编译
Zend权威认证试题讲解1 - PHP编程基础
Zend权威认证试题讲解2 - 用PHP4进行面向对象编程
Zend权威认证试题讲解3 - Web开发中的PHP
Zend权威认证试题讲解4 - 数组
Zend权威认证试题讲解5 - 字符串与正则表达式
Zend权威认证试题讲解6 - 文件操作
Zend权威认证试题讲解7 - 管理日期与时间

Zend权威认证试题讲解8 - 处理电子邮件
Zend权威认证试题讲解9 - PHP与数据库
Zend权威认证试题讲解10 - 流与网络编程
Zend权威认证试题讲解11 - 编写安全的PHP程序
Zend权威认证试题讲解12 - 调试与性能管理
5种php加密工具zendGuard、ionCube、SourceCop、SourceGuardian、phpShield
Zend_Controller 基础
Zend Studio 9.0.0 Final
Zend Studio 9.0.1 Final
Tags: Zend   Framework  
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号