你问 ThinkPHP 适不适合(零基础)速成找工作,没问题;你问 ThinkPHP “好不好”,也就算了。和 Django 对比,还有人觉得 ThinkPHP 好,我真的要出来说一句了—— 技术角度上,ThinkPHP 无论如何也配不上和 Django 对比。

ThinkPHP 的代码质量非常一般,风格尤其糟糕——大量单字母命名、全局函数、全局变量(还有组合体——单字母全局函数)、滥用 GET / POST 数组……比如想象一下表单里用了个单字母的key(出于混淆或压缩 URL 的目的),结果行为莫名其妙,最后发现这玩意儿竟然是框架默认的全局 GET 参数之一……最关键的是,这些还是他们引以为豪的特性!暴露给开发者的公开接口都这样了,框架内部就更不用说——随处可见“缩行”神技、没有统一的代码规范、对 PHP 的类型转换带来的坑不注意规避……

安全方面也尤为堪忧。且不说编码质量导致的细节漏洞,整个 SQL query builder 的设计简直令人吓掉下巴!最早我也没关注,还觉得作为一个现代框架(ThinkPHP 3.X),善用 prepared statement 、 parameterized query 应该是基本的,有可能的话还应该做好类型绑定(尤其在动态语言里),然而……直到我看到乌云上接二连三的爆出 ThinkPHP 的 SQL 注入漏洞(现在应该有很多都已经公开细节了,可以自己去搜搜看),修了一个甚至还间接导致 regression 出了个新的,觉得一个框架怎么这么容易被注入,我才去看了一眼那几个修复的 patch 以及整个 SQL 子系统,吓得我……官方甚至还有过类似“就是这么设计的”、应该开发者自己应对的回应——这话很多时候是对的,但我可一点也不觉得传任何值给 query builder (而且也没有强制使用“unsafe”之类的功能)导致注入是开发者应该应对的问题……

说到了 regression ,也就不得不提最关键的一点——测试在哪里?反正我是一点也不敢使用一个这么庞大却没有单元测试的框架的……( Knuth 的 TeX 都有测试呢……又不是编程之禅里的“大师”……)

另外有一个可以讨论的问题——升级。我是做过从 ThinkPHP 1.X 升到 2.X 再升到 3.X 的事情的。接口、行为甚至整个结构、模型都会变化,还记得升级文档是一份不厚的PDF,有很多细节没有完全覆盖到。和 Django 对比,即使是 Django 早期变化比较大的时期,也没觉得升级这么痛苦,大部分时候还会提前几个版本给 deprecated 警报……更不用说 Django 最近很长一段时间的升级都比较平滑了,这也和其架构合理有关。当然你也可以支持这种破坏性比较大的升级,前提是你愿意花时间跟进大版本,否则老版本最后总是会没有安全支持的——看看现在多少旧版本的 ThinkPHP 站点被脚本小子拿来玩?

ThinkPHP 也是有“优势”的,从上至下全中文——注释、commit message、文档、社区……真的几乎一句英文也没有(当然抛开代码),想要也没有,扫清了需要学英语这一大障碍。

我认为,只有出于历史原因被迫(虽然这种情况下我强烈建议换工作)或者技校速成,其他情况下别碰这个大坑。讨论“框架优劣”的话,也是 Laravel、Symfony 之类的 vs Django 更有意义。

Update (a.k.a. off-topic):

有不少人提到 CodeIgniter ,也是我用过的第一个框架,同时也是我读过的代码比例最高的一个PHP框架。中肯地说 CodeIgniter 的设计、架构乃至代码质量都是不错的,文档也很易懂。不过不论如何 CodeIgniter 的定位和 ThinkPHP 这类完全不同,就是一个轻量级的框架,最重要的区别之一在于数据层抽象非常简单。更不幸的是其开发停滞了很长一段时间,尤其是在 PHP 5.3 之后没能跟上(不但没有使用新特性,而且还存在兼容问题)……不推荐在新项目中使用 2.x 的 CodeIgniter ( PHP 5.3 之后有太多重要的新特性了)。至于前段时间 CodeIgniter 转让给了我这儿的一所 college (BCIT)来维护,推出了 3.x 版,没有用过就不评论了。

还有一个曾经很喜欢的框架是 CakePHP ,代码规范、测试完整、团队活跃,很喜欢它的数据模型,算是少数几个 ORM 做得不错的 PHP 框架了,调试功能也很强大,再加上自动生成代码和数据库等“scaffolding”功能,可以说是比较接近 Django 。然而可惜的是,我最喜欢的 data model 部分在 2.x 版本的实现有问题——历史包袱沉重、逻辑过度复杂,导致在极端情况下(例如复杂的层叠、链接)出现 bug ,而且很难修;我花过时间查 bug 、试图修复、也和 CakePHP 团队讨论了,最后认为很难在不破坏兼容性的情况下完全修复,所以留在了 3.x 版本里重构整个 data model 系统。如今 3.0 好像已经出来了,不过我仍然没用过……

Laravel 太新、 Symfony 太重,所以这两个其实我也是没用过的;Yaf 完全就是不同的方向了。

python django框架 比php_ThinkPHP, Django这两个框架孰优孰略,忽略语言本身?相关推荐

  1. 实时流处理框架Storm、Spark Streaming、Samza、Flink,孰优孰劣?!

    https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247486490&idx=1&sn=e25a05be8cf98c ...

  2. Node.js VS Python:孰优孰劣?

    转载自品略图书馆 http://www.pinlue.com/article/2020/07/2814/1111088479253.html 导读:人们可能会在Node.js和Python之间选择时感 ...

  3. 3dmax和python哪个好学_3Dmax和Maya孰优孰劣?初学者入门该如何选择?

    大家好,本人次时代游戏建模师一枚.入坑游戏建模已经有三年之久了,也算是小有经验,今天在这里给大家分享一些游戏建模的知识.如果觉得我的分享对你有帮助可以关注UP主,加我企鹅号前三位142,中间四位644 ...

  4. SAP BOPF和ESF2这两个框架有什么区别

    SAP社区上有这样一个讨论帖子: BOPF和ESF2 的区别? https://archive.sap.com/discussions/thread/3602400 BOPF全称: 可以看下这位SAP ...

  5. python框架django的使用_Django框架的基本使用,若依框架

    Django框架的基本使用,若依框架 Django框架的基本使用 Django是一个功能强大的web框架 框架模式 1.MVC和MTV框架 MVC:Web服务器开发领域里著名的MVC模式,所谓MVC就 ...

  6. Python框架篇之Django(Django项目搭建全过程、Web框架与Django)

    文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...

  7. python学习第八天---用Django框架创建可重用注册登录系统

    python学习第八天---用Django框架创建可重用注册登录系统 实现的功能 项目开始前的整体规划 搭建环境完成基础配置 创建app 更改语言和时区 数据库表生成 启动开发服务器 浏览器访问,检测 ...

  8. 【Python/Web】Django(一)Django框架的配置和使用

    序章 Python下面有许多受欢迎的web框架,例如Flask.Twisted等,Django也不例外.许多成功的网站都是基于Django,Django作为一个开源的Web应用框架,采用了 MVT 的 ...

  9. python开源项目框架二次开发_Python中三大框架各自的应用场景(DJango,flask,Tornado)...

    django:主要是用来搞快速开发的,他的亮点就是快速开发,节约成本,正常的并发量不过10000,如果要实现高并发的话,就要对django进行二次开发,比如把整个笨重的框架给拆掉,自己写socket实 ...

最新文章

  1. 彩色RGB图像转为灰度图像
  2. 如何破解无线路由器密码,如何破解WEP密码,破解无线路由器
  3. ant+jmeter中build.xml配置详解
  4. php pdo mysql哪个好_php pdo和mysqli对比选择
  5. 树莓派 Raspberry Pi 更换国内源
  6. Effective C++学习第五天
  7. 【开源中国众包】快来参与开源中国众包平台的开发包
  8. java swt designerpdf_eclipse学习笔记!(4) ----- SWT Designer 下 SWT常用组件
  9. arduino uno电压_Arduino UNO中文数据手册
  10. window7 32位部署django
  11. 解决新用户注册Kaggle无法显示验证码的问题
  12. vs窗体应用程序c语言,使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)...
  13. lisp如何将度分秒转换为弧度_3 角 度分秒与弧度互相转换
  14. 各省市大学 全国各个省市重点民办本专科大学
  15. 计算机混合运算java,大话Java混合运算规则
  16. 爱奇艺网络流量分析引擎 QNSM 及其应用
  17. migration java_如何重置migration
  18. npm run dev之后 可爱(e’xin)的warning,error们
  19. bat文件的@echo off是什么作用?
  20. xmind下载安装电脑版教程

热门文章

  1. matlab 2016b更改工作路径
  2. Quartz之入门实例
  3. 7. Python运算符之逻辑、成员、身份运算符及优先级
  4. 独角兽之名:解读华云数据背后智慧商业谋略
  5. 万万想不到,你是这样的“闲鱼”!
  6. HTTP 499 状态码 nginx下 499错误
  7. python连接memcached
  8. 【加密解密】单表加密(Javascript实现)
  9. Nginx/LVS/HAProxy 负载均衡软件的优缺点详解
  10. MVC中,视图的Layout使用