本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群。希望光临本博客的人可以进来交流。寻求共同发展。搭建平台。

本人博客也有许多的技术文档,希望可以为你提供一些帮助。

QQ群:   191848169               QQ:450225664

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

关于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是最好的。

Yii和ThinkPHP对比杂谈相关推荐

  1. Yii和ThinkPHP对比心得

    本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人可以进来交流.寻求共同发展 ...

  2. yii和thinkphp杂谈

    2019独角兽企业重金招聘Python工程师标准>>> 这不是一篇评测文章.只是我的喃喃碎语,不计较真.而且,下面的内容真的会很杂,不全面,而且你不可能有和我一样的开发经历.所以对于 ...

  3. PHP工程师需要掌握的知识(转载)

    掌握PHP基础.文件操作.面向对象编程.CURL扩展. 掌握Linux环境下面LAMP环境搭建.LNMP环境搭建. 了解基本的HTTP协议和计算机网络知识. 熟悉常用的算法与数据结构知识,队列.栈.队 ...

  4. 基于Discuz的原生态MVC框架Uxf

    前言 国内大量网站在使用Discuz程序,当然,大多数网站只将其作为一款论坛程序,少量的将其作为一款完整的社区程序.因此,授权不授权的情况撇开不谈,很多人都会基于该款程序进行二次开发. Discuz二 ...

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

    学习node已经有一段时间了,之前把了不起的node.js看完了,基本算了解了一些node的基本的用法还有一些概念了,然后就开始看第二本node.js实战,第一章就是搭建一个博客程序.但是不得不吐槽一 ...

  6. CodeIgniter学习笔记 Item10--CI总结精华

    Yii CI ThinkPHP ZF 主要内容 CI简介 深入MVC设计模式 CI中控制器与视图 CI的超级对象 数据库访问 AR模型 如何扩展CI的控制器(登录验证) 模型 url相关函数 设置路由 ...

  7. 膜拜!阿里内部都在强力进阶学习 springboot 实战派文档

    前言 对于大部分普通家庭的孩子来说, IT 行业是一个单靠个人或者团队能力就能"最快实现人生小目标"的行业 .所以, 如果这本文可以帮助读者学会精通 Spring Boot ,并且 ...

  8. 膜拜!阿里内部都在强力进阶学习springboot实战派文档

    前言 都说程序员工资高.待遇好, 2022 金九银十到了,你的小目标是 30K.40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer ...

  9. 一个网络公司的任职要求

    岗位职责 1.协同完成网站产品的技术架构设计: 2.独立完成公司网站产品的功能模块编码: 3.负责网站平台相关业务模块的分析.设计: 4.参于各项目中的编码工作: 5.相关开发文档的整理与编写. 6. ...

最新文章

  1. 通用权限管理模块系列————参考资料————Windows安全性参考
  2. a href=# 与javascript:void(0)的区别
  3. C/Cpp / 虚函数是否可以用 inline 修饰
  4. 财贸企业实行国有民营机制的调查
  5. 微信小程序模仿开眼视频app(一)——视频首页、视频详情、分类
  6. Leecode刷题热题HOT100(14)——最长公共前缀
  7. 基本排序算法:Python实现
  8. 学习HTMLT5_1 拖拽
  9. 常用三极管的区别 9012 9013 9014 9015 8550 8050
  10. Matlab中tic和toc用法
  11. 图形学基础|景深效果(Depth of Field/DOF)
  12. 轻量级交通仿真——Flow
  13. 周伟焜挥别IBM 一个时代结束
  14. ABAP SPLITTER技术总结及使用技巧
  15. bable.js是什么
  16. T4M插件放入unity后怎么找不到_Unity动画系统详解4:如何用代码控制动画?
  17. android 左右声道,Android立体声pcm的数据结构,左右声道拆分、左右声道反转
  18. 短信验证码接收不到原因和解决方案分析
  19. 深入JUnit源码之Runner
  20. 产品概念之2/4:三层次理论 —— 生产者主导视角的产品概念

热门文章

  1. 用c语言做简单的用户管理系统,简单客户信息管理系统的设计与实现.doc
  2. linux ntp校时 日志,Linux NTP校时
  3. java 双重检查锁定及单例模式
  4. matlab中cumprod是什么意思,vap在matlab中是什么意思?
  5. 如何用反余弦求pi c语言,acos()_C语言acos()详解:反余弦函数,求反余弦值
  6. 2021年安全员-C证模拟考试系统及安全员-C证操作证考试
  7. 双柱式机械式举升机设计(说明书+CAD图纸+任务书+实习报告+翻译)
  8. 妙味远程课堂-JS热身运动-上
  9. ALLEGRO 问题累积
  10. WPS Office之PPT动画应用技能-陈慧-专题视频课程