yii和thinkphp杂谈

不是一篇评测文章。只是我的喃喃碎语,不计较真。而且,下面的内容真的会很杂,不全面,而且你不可能有和我一样的开发经历。所以对于某些我醉心的特性,你可能不会理解。同样的,我也不可能全部理解你为何对某一项特性十分喜欢。

关于ThinkPHP(以下简称TP)和Yii Framework(以下简称Yii)的背景、作者和速度方面就不涉及了。因为速度是一个很复杂的问题,牵扯的因素很多。我不得不承认ThinkPHP是 一个是国内框架运营方面的榜样(当FleaPHP/QeePHP最火的那阵,我说过FleaPHP/QeePHP会倒的)。

运行环境:

  • Windows NT ACER 5.1 build 2600 (Windows XP Professional Service Pack 3) i586
  • Apache/2.2.14 (Win32) DAV/2 mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
  • Mysql 5.1.4

下载的代码:

  • ThinkPHP 2.1,带扩展、示例和文档完整包,发布于2011年5月1日,下载地址是 http://thinkphp.cn/Down/download/178
  • Yii 1.1.7,内含框架、实例和环境检测,下载地址 http://yii.googlecode.com/files/yii-1.1.7.r3135.tar.gz 文档需要另外下载

中文化方面,TP和Yii都可以满足中文用户的需求。但是由于Yii是国际化的项目,所以代码的注释仍旧是英文。不过两个框架的作者都是国人(没错,Yii作者的国籍仍旧是中国),所以交流起来还是很方便的。

是Yii自带了一个环境检测脚本,可以告诉你当前的主机环境是否满足Yii的需求。检测的内容也比较详细。我觉得这点比较方便。TP最低需要PHP5.0支持,而Yii最低需要PHP 5.1.0支持。由于我使用PHP 5.3,所以对我来说没有什么区别。

Yii是纯面向对象的的框架,而TP提供了一系列单字母函数。相比之下我更喜欢Yii的方式,因为可以避免项目之间的冲突。

TP在以前的版本的基类Base类,当时就和一个整合Ucenter时的类冲突了,一度很苦恼。现在TP的各种基类仍旧是直接命名,如Think 类。在项目开发过程中就会体会命名冲突的痛苦之处。Yii则在框架的类都加上了C前缀(接口是I前缀),有效地避免了这个问题。Yii中的 CComponent是所有类的基类,可以看看CComponent的代码,很有用。

说到命名问题了,就不得不说自动导入的问题。TP的类导入和Yii的代码风格差不多。但是Yii还支持PHP的命名空间和自定义autoload方法。

TP有个特色叫项目编译。我觉得与其使用项目编译,还不如使用APC。在Yii中也有个yiilite.php文件,里面就包含了Yii的所有核心类。Yii作者表示在没有APC的情况下,还是不要使用这个“编译”好的文件,因为反而会增加系统开销。

TP中还在第一次访问的时候自动生成项目,我觉得这一点和自动编译一样,都是我不喜欢的。我对每添加一个if都很敏感,这种判断让我很纠结。比如说 TP在每次运行的时候都要检测PHP版本,而Yii则单独做了一个内容更详细的环境监测脚本。我既然要用这个框架,我在第一次使用的时候,肯定就知道能不 能在当前环境上使用了,为什么要每次都要检测呢。当时我就说过,TP为用户做了太多事情。比如旧版本中的TopN函数。

Yii的组件思路是非常不错的,用起来十分地舒服。从session到cache,你可以无缝地更换所有的组件而无需重构项目。而且Yii的延迟加 载也做得比较彻底,每个组件都是用到的时候才加载。比如,TP中,如果配置了session自动打开,则TP在应用初始化的时候执行 session_start()。而Yii则是你用到session的时候才打开session。

说到项目的配置文件,TP要求是config.php,而Yii则比较灵活,支持多配置文件。

当初TP很推崇自己的ThinkAjax,现在也改用JQuery。这一点是进步。

TP做了很多小实例,这一点值得Yii学习。Yii在这一方面正在有一个叫yii playground的实例网站在开发中(http://code.google.com/p/yiiplayground/)。

TP的动态模型可以实现不需要定义Model。但是在实际的项目中,我更倾向于使用Yii的方式。顺便说一句,将label定义在model中,为我的日常开发带来了许多方便之处。

刚才提到TP的项目自动生成,Yii中也有这种工具。而且比起TP,Yii的工具更加强大而且可扩展。

从TP的代码中,有人可以看出其作者熟悉JAVA。而从Yii的代码中,有人会发现其作者熟悉.Net。这常常是我身边人看到代码的时候发生的小插曲。

Yii封装了大量的页面控件和类库,也是Yii如此吸引我的一点。这是TP短期无法比拟的,在TP的使用过程中总遇到这样那样的问题,让我感觉TP对我反而是阻碍。而Yii真的是,舒服,实在是太好用了!

无论从代码规范、设计思路、类库丰富程度上来说,TP都远远不及Yii。有人说你看TP多简洁,Yii太臃肿了。错了!简单和简洁不是一回事。TP 那叫简单,你读读Yii的代码吧,那才叫简洁。至于臃肿,去看看Zend Framework就知道了。(顺便说一句,我很喜欢Zend Framework,它是学习设计的典范)

说到读代码。对于程序员真的很难吗?读写得好的代码应该是一种享受才对。Yii的学习曲线是比TP高那么一点点,但是对比Yii的巨大优势而言不算什么了。而且,我认为在遇到学习困难就退缩或者认为Yii就像天书一样的人,还是转行吧。

以上是应一篇评论所写的。对比TP1,现在的TP2的确有了很多进步,但是还是存在一些问题。对比Yii……,TP真的没有可比的能力。抱歉让TP的fans失望了。

那就下定论了吗?不,不是的。从类库到框架,再到解决方案。什么是最好的?每一个人都有不同发说法,这是因为每一个人的思维习惯不同,遇到的问题不同,问题所在的环境也不同。怎么能奢求所有人都有同一个选择呢?

还是那句,适合,就是最好的。对我来说,Yii是最好的。

-EOF-

时间: 2024-07-29 05:58:44

yii和thinkphp杂谈的相关文章

Yii和ThinkPHP对比杂谈

本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人可以进来交流.寻求共同发展.搭建平台. 本人博客也有许多的技术文档,希望可以为你提供一些帮助. QQ群:   191848169               QQ:450225664 这不是一篇评测文章.只是我的喃喃碎语,不计较真.而且,下面的内容真的会很杂,不全面,而且你不可能有和我一样的开发经历.所以对于某些我醉心的特性

初学者如何进行代码重构

只要你想,哪怕是初学者也可以对代码进行重构. 首先要明白的一点是:重构是建立在代码正确可以运行的基础上对其进行优化.改进的过程,我们要做的是使能满足最基本的需求的代码变得更易读.易维护.效率更高 . 1.易读: 我们写的代码是给别人看的,写完的代码你不可能永远维护着,所以有必要让自己的格式代码更容易被别人看懂. (1)足够多的换行.空格 ,反正解析代码的时候并不会解析这些空白的部分,不用白不用啊,还能显的代码行数多呢^^ (2)要做到这一点,最简单的是添加足够的注释,说明类和方法的功能,方法的入

PhpStorm下Laravel代码智能提示

phpstorm&Laravel PHPstorm是我见过的最好的PHP的IDE,前年用的时候就毫不犹豫的抛弃了zend studio :) ,Laravel是我用过最好的框架,除了做手游后台这类有高并发需求的项目的时候会使用swoole,像yii,thinkPHP,zend之类已经直接不在项目中用了,不过悲伤的是最好的IDE不支持最好的Laravel的代码提示,后来我在github上翻,找到了laravel4-phpstorm-helper这个工具,不过很遗憾,已经不更新很久了,后来在外国论坛

快速使用node.js进行web开发

首先关于node.js的学习,这里推荐一本比较好的教程,nodejs web开发指南,该书通俗易懂地将node.js语言特性讲解完之后,又从一个项目角度带领读者使用node.js学习web开发.相信这是一个比较好的学习模式和过程.由于这本书是2012年出的,书中的一个web教学项目是开发一个微博.从2012到现在,node.js及其生态环境发生了很大改变,所以关于该书的学习如果照着书本显然是过于陈旧的.到目前为止,node.js的web开发框架已经升级到了Express4.12.1,对于Mong

PHP不仅仅是PHP

PHP不仅仅是PHP PHP不仅仅是PHP. PHP的面试不仅仅会问到PHP语言本身(基本都是基础和细节),下面列举的主要是都是高级工程师的要求 比如:PHP中include和require的区别详解, 各个版本间差异,就算没用过别的版本,也要看一下私下学习一下,也至少要看一下版本7,体现你的爱学习有学习精神(会有加分哦) 然后还会问到: MySQL:包括索引(索引命中),引擎(常用引擎及区别),高并发,表结构的设计,如何排查慢查询 HTTP协议:三次握手,状态码,请求的头部和body以及响应的

认识IT圈的这些人 你的路将走的更顺利

不管什么时候,你如果想发展壮大,首先第一要素就是需要人脉,你要接触各种各样的人,卖衣服的也好,卖袜子的也罢,卖空间也行,卖域名也可以!如果有机会可以认识,请记住,不要错过这个机会.因为你不知道什么时候,或许他们就能帮你一把!俗话说,朋友多了路好走,如果你擅长整合资源,把每个人的特长都了如指掌.那么恭喜你,你获得了一笔巨大的财富.今天,免费给大家分享一下我的人脉资源,这只是第一波,以后还会有更多的人脉资源为大家分享,记得,多认识站长圈里面的朋友,没有坏处的!而我为大家分享的这些人都是在各自领域有很

推荐一个国外C开发的PHP框架--Phalcon,性能相当好

本人亲自配置测试后.性能相当不错.不过有一点.使用极不符合国人习惯,甚至和大多数主流PHP框架如Zend Framework,Yii,Ci,Thinkphp都不一样. Phalcon 是一个开源的,全堆栈的,用C语言写成的php5框架,专为高性能设计.你不需要学习和使用C语言的功能,因为这是一个PHP框架,只不过用C写成而已.同时Phalcon是松耦合的,您可以根据需要使用其他组件. Phalcon不只是性能优越,我们的目标是让它强大而且易于使用! 从介绍上可以总结出几个特点: 1.开源 可以下

使用xhprof会在nginx下报502 Bad Gateway错误

在yii.thinkphp中使用xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);报502错误. 应该修改为以下配置: xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

用node.js 搭建的博客程序心得(node.js实战读书笔记1)

学习node已经有一段时间了,之前把了不起的node.js看完了,基本算了解了一些node的基本的用法还有一些概念了,然后就开始看第二本node.js实战,第一章就是搭建一个博客程序.但是不得不吐槽一下node,发展得太块了,很多库已经和之前的用法不一样了,就要一直去百度google来查询最新的用法,其实我觉得这样并不见得是一件好事,因为不稳定,所以就不好学习,就要一直保持对于node的关注.不废话了,这篇文章就大概说一些在这章里面所学习到的一些东西,经验总结吧 1.express - 基于 N