Yii和ThinkPHP对比杂谈
本人小菜鸟一只,为了自我学习和交流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对比杂谈相关推荐
- Yii和ThinkPHP对比心得
本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人可以进来交流.寻求共同发展 ...
- yii和thinkphp杂谈
2019独角兽企业重金招聘Python工程师标准>>> 这不是一篇评测文章.只是我的喃喃碎语,不计较真.而且,下面的内容真的会很杂,不全面,而且你不可能有和我一样的开发经历.所以对于 ...
- PHP工程师需要掌握的知识(转载)
掌握PHP基础.文件操作.面向对象编程.CURL扩展. 掌握Linux环境下面LAMP环境搭建.LNMP环境搭建. 了解基本的HTTP协议和计算机网络知识. 熟悉常用的算法与数据结构知识,队列.栈.队 ...
- 基于Discuz的原生态MVC框架Uxf
前言 国内大量网站在使用Discuz程序,当然,大多数网站只将其作为一款论坛程序,少量的将其作为一款完整的社区程序.因此,授权不授权的情况撇开不谈,很多人都会基于该款程序进行二次开发. Discuz二 ...
- 用node.js 搭建的博客程序心得(node.js实战读书笔记1)
学习node已经有一段时间了,之前把了不起的node.js看完了,基本算了解了一些node的基本的用法还有一些概念了,然后就开始看第二本node.js实战,第一章就是搭建一个博客程序.但是不得不吐槽一 ...
- CodeIgniter学习笔记 Item10--CI总结精华
Yii CI ThinkPHP ZF 主要内容 CI简介 深入MVC设计模式 CI中控制器与视图 CI的超级对象 数据库访问 AR模型 如何扩展CI的控制器(登录验证) 模型 url相关函数 设置路由 ...
- 膜拜!阿里内部都在强力进阶学习 springboot 实战派文档
前言 对于大部分普通家庭的孩子来说, IT 行业是一个单靠个人或者团队能力就能"最快实现人生小目标"的行业 .所以, 如果这本文可以帮助读者学会精通 Spring Boot ,并且 ...
- 膜拜!阿里内部都在强力进阶学习springboot实战派文档
前言 都说程序员工资高.待遇好, 2022 金九银十到了,你的小目标是 30K.40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer ...
- 一个网络公司的任职要求
岗位职责 1.协同完成网站产品的技术架构设计: 2.独立完成公司网站产品的功能模块编码: 3.负责网站平台相关业务模块的分析.设计: 4.参于各项目中的编码工作: 5.相关开发文档的整理与编写. 6. ...
最新文章
- 通用权限管理模块系列————参考资料————Windows安全性参考
- a href=# 与javascript:void(0)的区别
- C/Cpp / 虚函数是否可以用 inline 修饰
- 财贸企业实行国有民营机制的调查
- 微信小程序模仿开眼视频app(一)——视频首页、视频详情、分类
- Leecode刷题热题HOT100(14)——最长公共前缀
- 基本排序算法:Python实现
- 学习HTMLT5_1 拖拽
- 常用三极管的区别 9012 9013 9014 9015 8550 8050
- Matlab中tic和toc用法
- 图形学基础|景深效果(Depth of Field/DOF)
- 轻量级交通仿真——Flow
- 周伟焜挥别IBM 一个时代结束
- ABAP SPLITTER技术总结及使用技巧
- bable.js是什么
- T4M插件放入unity后怎么找不到_Unity动画系统详解4:如何用代码控制动画?
- android 左右声道,Android立体声pcm的数据结构,左右声道拆分、左右声道反转
- 短信验证码接收不到原因和解决方案分析
- 深入JUnit源码之Runner
- 产品概念之2/4:三层次理论 —— 生产者主导视角的产品概念
热门文章
- 用c语言做简单的用户管理系统,简单客户信息管理系统的设计与实现.doc
- linux ntp校时 日志,Linux NTP校时
- java 双重检查锁定及单例模式
- matlab中cumprod是什么意思,vap在matlab中是什么意思?
- 如何用反余弦求pi c语言,acos()_C语言acos()详解:反余弦函数,求反余弦值
- 2021年安全员-C证模拟考试系统及安全员-C证操作证考试
- 双柱式机械式举升机设计(说明书+CAD图纸+任务书+实习报告+翻译)
- 妙味远程课堂-JS热身运动-上
- ALLEGRO 问题累积
- WPS Office之PPT动画应用技能-陈慧-专题视频课程