重新审视 PHP 框架 CodeIgniter VS Zend

我们计划从头开始一个新项目,为此评估了一些PHP框架。我们的备选列表有CakePHP , CodeIgniter , Symfony和Zend 。 我们分别使用这4种框架编写了一个相同的小应用(一个简单的Wiki应用),希望我们能尽快选定一个最合适的。

声明:我会努力确保自己的客观性,虽然我是一个ColdeIginter的爱好者。我所工作的公司是Zend的合伙人(我们已经使用了Zend Platform 和 Zend Studio)。

  尽管一开始的计划是评估4个框架,但是这篇文章实际是CodeIgniter和Zend Framework的直接比较。在花费了几个小时研究了这4个框架后,我不得不把Symfony和CakePHP从名单中排除。理由如下:

  Learning curve 学习曲线
Symfony 和 CakePHP都有一个非常陡峭的学习曲线。CakePHP有严格的规则:数据表明此、文件位置、方法名和类名。Symfony使用 .yml 格式(需要学习,虽然它不是真的很难)来存储配置信息,并且大量的操作需要通过控制台(console)完成,创建数据表、数据模型和很多其它文件都需要使用命令行。

  Strict ORM: 严格的ORM
Symfony 和 CakePHP都有一个成熟的对象关系映射器(object-relational mappers ORM) ,提供对数据的访问,但是这一特性很难被禁用,除非作出大量的努力。这些ORM有着严格的规则和约定,它们必须被遵循。与之相反,Zend Framework 和 CodeIgniter 在是否使用Models和如何使用Models上非常灵活的。使用Models是可选的,虽然它们都有数据映射器(data mappers),但没有这些应用一样可以进行(开发编写)。应用的数据操作将是极其密集和精细(intensive )的,我们不愿意受到选择的限制。

  Flexibility: 灵活性
Zend Framework和CodeIgniter比其他两个框架更灵活。

最终对比

    CodeIgniter   Zend Framework

  Set Up 初始建立

  CodeIgniter很容易初始化。 复制框架的所有文件到网络服务器,这是一个不错的开始。 它的文件夹也很小-大约2 .1兆。从开始建立,5分钟后,我就可以显示出默认主页。   Zend Framework需要麻烦一些,它需要创建一个bootstrap文件,填写所有的初始化设置。比较之下,框架有点大-大约12.4MB。整个初始建立过程用来大约19分钟。

  文档

  文档的结构和组织相当好,但是不如Zend Framework详细。CodeIgniter有论坛和Wike,有很多用户提交的代码。   Zend Framework有非常详细的文档,并且有很多示例。在我看来它的文档结构不如CodeIgniter,这可能是受到前面提到的细节和大量的可用的部件影响。ZF 也有一个Wiki,里面有少量的教程。

  模板

  CodeIgniter包括一个模板分析器类,在我看来,它的作用是有限的,因为它不支持逻辑(例如,IF语句)。不管怎么说,CI建议在模板(view)中使用PHP标签。   ZF 包含了一个布局类,用于给整个站点或者应用提供一个通用布局(或者多个布局)。它直接在模板中使用PHP标签,它也提供了一个抽象的View类,可以使用第三方模板库进行扩展。

  组件

  CI有很多库和帮助器来简化开发过程。尽管这些相比ZF还是显得少,但大体上,用法更简单(While it does have less of these than ZF, in the main, the usage of the CI variants is simpler)。   ZF有巨量的类和组件。它们有着很好的文档但使用起来要比CI的稍微复杂一些。

  数据访问

  CI有一个用于处理数据库连接的数据库类。这个类可以使用标准的SQL查询,使用标准的PHP方式进行创建、检索、更新和删除。CI也提供了一个Active Record类,这是一个修改版的活动记录模式(Active Record Database Pattern)。这一模式可以让你使用更少的代码进行数据检索、插入和更新。某些情况下仅仅需要1到2行代码就可以进行一个数据操作。除了简化,活动记录的一个主要好处是:它可以创建一个不依赖数据库的应用,因为查询语句是由不同的数据库适配器生成的。它还考虑了查询的安全性,系统会自动对变量进行escape。   Zend_Db 和它的相关类为ZF提供了一个简单SQL数据库接口。它接收标准SQL查询但是简化了获取查询结果的过程。它还包括了一个ORM,使用Table Data Gateway 和 Row Data Gateway。它们分别把数据表和数据行包装成对象,并且极大的提高了开发速度。缺点是,和CI使用的修改版的active record pattern(没有广泛的使用对象)相比,有轻微的性能损失。Zend_Db 还可以处理表关系。(Zend_Db can also model table relationships in PHP classes making database joins a breeze.)

  灵活性

  CI非常灵活,几乎所有的默认设置都可以修改。   ZF其实一个类的简单集合,所有的文件和目录可以被放置到任何位置,只要这些位置被加入到了bootstrap文件。

  验证

  在CI中数据验证是由一个验证类处理的。一些规则被定义并赋予验证对象(object),验证对象自动的验证从URL或者表单提交的数据。程序员可以决定如何处理这些获取。验证类还可以帮助自动的给指定字段设置错误信息。   Zend_Validate 提供了一套常用的验证器。它还提供了一个简单的验证器连接机制,多个验证器可以按指定的顺序应用到单一数据上(datum )。在 ZF中,每个验证器都是一个不同的类,类被添加到数据(就像过滤器),而不是像CI一样,数据被传入类。In ZF, each validator is a separate class and the class is added to the data (like a filter) rather than the data being passed into the class like it is in CodeIgniter.

  表单

  CI中的Form Helper文件包含一些函数,用于帮助操作表单。它的作用是生成表单字段,但是书写HTML仍然是无法避免的。   Zend_Form 简化了表单的创建和处理。它处理元素过滤、验证、escaping data、表单生成(rendering)。使用Zend_Form,ZF可以使用PHP完全的包装一个表单,包括标签、验证、错误信息。

  性能

  CI大约有ZF的2倍性能   ZF大约比CI慢一半

  测试

  CI有一个单元测试类,但是它鼓励混合测试代码和真实代码,我不建议这样。也许可以使用第三方的扩展用于简单测试。A third-party extension for SimpleTest is available though。和CI的类一起使用PHPUnit也是可以的。   ZF没有内置的测试类,但是它的核心类使用PHPUnit作为测试框架,这可以被扩展来包含所有的附加类 this can be extended to include any additional classes。在ZF中使用 SimpleTest 也是可行的。

  国际化

  NO   YES

  授权

  BSD-style   New BSD
时间: 2024-08-02 19:48:22

重新审视 PHP 框架 CodeIgniter VS Zend的相关文章

使用Zend Framework框架中的Zend

      大家都知道Zend Framework是由zend公司所开发的一款标准的PHP5版本的框架,他所包括了几乎我们常所使用到的功能模块,如 feed,mail,cache,db等等,今天我们主要是介绍Zend_Mail模块,来帮助我们及时的把应用的信息发向管理员,发向客户.        下面是我所写的一代码块,这代码是通过SMTP方式来发送邮件,需要提供提供用户名,密码和主机地址,这也是我们常所使用的邮件登录方式. require_once 'Zend/Mail.php'; requi

PHP框架:CodeIgniter v1.7.2发布

CodeIgniter是一款强大的轻量级PHP框架,使用它可以大量减少开发时间,提高开发效率. CodeIgniter v1.7.2 发布了.这是继七个月之后的再次更新,它给人们带来了惊喜 : ) 更新如下:1.兼容PHP 5.3.02.新增了Cart Class类3.改进Form helper4.新增is_php() 函数5.修改了show_error()函数6.修正了多个bug 下载:CodeIgniter v1.7.2

php框架codeigniter框架源代码分析,注释中文化,类库分析(一)

最近这几天决定看 ci框架的源代码的,因为它是轻量级的,代码文件的结构比较清晰,又index.php作为 入口,在codeigniter.php文件中加载所有的基础类,于是我挨个类滴看下去,并且在看的时候分析了每一步 关键的进程,而且对原来的英文注释进行了翻译,现在主要文件已经翻译完成,稍候会翻译并分析一些其他 的重要的类,敬请期待 这里的是 它的详细的执行过程,从入口到最后结束,进行了完整的记录,大家先看着,其他的分析,例 如,CI超类的结构,如何实现MVC模式,数据库类的实现,xss过滤类的

框架-codeigniter中的session的问题

问题描述 codeigniter中的session的问题 我的后台php用的是CI的框架,然后因为各种各样的原因,我的视图没有放在CI的文件夹里,而是放在外面直接访问的. 那么问题来了,我的页面现在,通过访问控制器中的登录接口来实现登录,登录接口在登录成功之后给session赋值,然而,我的前台却取不到 ps:控制器里测试过session已经写进去了. ps:我的前端视图和整个CI的文件夹是分开放的→像这样../page/XXX.php 和 ../tool/application/control

PHP框架CodeIgniter框架学习笔记

CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而"优雅"的工具包,它可以为 PHP 程序员建立功能完善的 Web 应用程序.如果你是一个使用共享主机,并且为客户所要求的期限而烦恼的开发人员,如果你已经厌倦了那些傻大笨粗的框架 那么 CodeIgniter 就是你所需要的,如果- 你想要一个小巧的框架. 你需要出色的性能. 你需要广泛兼容标准主机上的各种 PHP 版本和配置. 你想要一个几乎只需 0 配置的框架. 你想要一个不需使用命令行的框架. 你想要一个不

开源PHP框架: CodeIgniter 1.6.0发布

  CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包.她提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发.使用 CodeIgniter 可以减少代码的编写量,并将你的精力投入到项目的创造性开发上. 她是一个小巧但功能强大的 PHP 框架,作为一个简单而"优雅"的工具包,她可以为 PHP 程序员建立功能完善的 Web 应用程序.如果你是一个与人共享主机并且为客户要求的期限而烦恼的开发人员,如果你已经厌倦了那些傻大笨粗的

解析php框架codeigniter中如何使用框架的session_php技巧

里面有两种session的使用方法:1是php的原始的session使用方法,这个很简单,$_SESSION['name']="name",然后在需要的地方显示:echo $_SESSION['name'];2是codeigniter这个框架的一个方法:下面就详细讲解如何使用这个有点点复杂的方法:首先,在\ci\application\config下面的config.php文件中找到:$config['encryption_key'] = '';这个里面随便填什么值都可以,但是不能为空

PHP 框架 CodeIgniter 找到新家

当我们宣布要为 CodeIgniter 寻找一个新家的时候,我们从世界各地收到了大量的电子邮件,甚至持续到了今天.但,有一个简单问题:我们应该把框架托付给谁?事实证明,巨大的压力让我们的选择很纠结. 我们很快否决了一些经验不足的候选人.我们回绝了那些没有财力或时间来管理这个庞大项目的候选人.我们也把那些只为赚钱的人拒之门外.但还是有很多候选人,他们有能力也很有远见.不过,这其中只有一位候选人鹤立鸡群. 加拿大温哥华的不列颠哥伦比亚理工学院(BCIT)是一所拥有超过 48000 名学生的高度重视应

PHP框架之Zend Framework

简介 Zend Framework是一个面向对象的框架, 支持PHP5,其目的在于建造更安全.更可靠的Web 2.0应用及web服务,并不断从前沿厂商(如Google,Amazon,Yahoo,Flickr,StrikeIron和ProgrammableWeb等)的API那里吸收精华.框架本身使用了很多设计模式来编写,架构上很优雅,开发人员可以方便地把它和其它框架混合使用.Zend Framework的MVC设计比较简洁,功能较全面,自带了许多的library,而且配置文件比较强大,能够处理XM