以下是ThinkPHP创始人流年对PHP开发人员关于TP5跟Laravel做比较的回应:

技术社区里面经常有人提到ThinkPHP5和Laravel5的优缺点,或者抄袭之类的,其实每个框架都各有优缺点 没有完美,所以优缺点就看开发者的角度和认识(因为你熟悉了一个框架 用起来顺手本身就是一个优点),对于有些用户(尤其是新人)觉得文档好、上手容易是优点,有些用户觉得性能好是优点,又有些用户可能觉得方便扩展才是优点。但往往一个缺点会掩盖所有的优点,这就是很多用户抱怨的原因。喜欢一个框架一定有喜欢的地方,讨厌一个框架也总能找出理由。我觉得开源中国的用户相比国内某些社区来说不那么逼乎,言论都相对客观,所以就特别写了下面一些内容。

以往的版本我们就不说了(已经过了维护生命期了 大家也没有必要揪着历史说事,事物都在发展),毕竟和LV相提并论的最多也是TP5。

我们在开发TP5的时候 一方面吸收了以往版本的用户反馈和抱怨,一方面也吸收了国外主流框架思想的洗礼(例如Laravel,很多用户说TP5参考了yii2 ZF2 其实并没有 如果你看到了只能说明主流的现代思想是殊途同归的),并秉承了TP一贯的大道至简的开发思想,经过了长达十月的开发测试才诞生了第一个TP5的正式版本,并且已经迭代到了V5.0.4版本了。应该来说表面上沿用了Larave的很多方法和思想,其实本质上的实现差异很大或者完全不同。 沿用(或者说是在有些人眼中的抄袭也好)的目的主要包括: 1 我们找不到更适合的英文单词(但LV很多单词是用的很生僻,TP5主要的单词都是四级之内词汇) 2 我们在为吸收转化LV开发用户做铺垫^_^

因此在上手难度和性能上相比较laravel是占优势的,加上从正式版发布后的文档教程系列一直在完善(主要是迎合国内的新手),因为从TP3.2版本到5.0版本跨度非常之大,我们也认识到存在不可避免的用户流失(相比较TP3.2引入了很多的主流现代开发思想,需要补课很多 包括composer、面向对象、依赖注入等),但我们也相信,我们的新版本也会俘获另外一批懂我们的用户,从而转向TP5(事实上确实如此)。

TP5并非只是单纯的借鉴,一样有大量的创新,尤其在路由、日志、控制器和模型的一些细节方面,这些只有真正去用过才能体会。TP5的底层架构和LV是完全不同的设计,但都遵循一些规范(包括PSR-2,PSR-4,RESTFul),并都在往主流的设计思想靠拢。

但作为一个新诞生的孩子路还有很长,生态之类的还不够完善(LV也不是靠官方团队做大的 有大量的人在为生态贡献),所以从我们的角度来看,TP5和LV5 孰好孰坏,没有绝对,从长远来看,TP5在国内替代LV5的可能性越来越大,至少在国内我们的优势非常明显(可以参考百度指数和谷歌趋势数据),包括性能、文档以及社区(如果是盲目崇拜LV的我也无话可说,毕竟国内也有盲目崇拜TP的^_^)。

因为LV的架构和内部实现相当的复杂,相比较而言TP的代码和文档 都非常容易阅读和理解,那么扩展起来自然就会轻松很多,LV主打的就是优雅、现代编程思想以及优秀的扩展生态。但TP5一样优雅,并且功能不会缺失太多,至于扩展生态方面就需要靠社区和用户的参与和贡献了。在国内PHP开源框架这块,我们风风雨雨走了十多年,我们了解我们的用户的想法,同时也在学习吸收国际的现代开发思想。

总结来说,TP5更简单实用,文档丰富,LV更严谨,生态成熟。性能在这个时代其实已经不是最关键的了,所以我并不想强调性能方面的,国内的企业更关注的是开发周期和开发成本。

原文网址:http://www.thinkphp.cn/topic/33656.html


附:Laravel与thinkPHP的异同点

主要区别:(thinkPHP更适合国人的编码习惯)

1.渲染模版方式的不同:

在Laravel框架里,使用return view()来渲染模版;

而ThinkPHP里则使用了$this->display()的方式渲染模版;

2.在Laravel框架里,由于其考虑到了跨站请求伪造, 所以如果使用form表单以post方式进行传值时,如果不再form表单中加入{{csrf_field()}}则会报出TokenMethodnotfound的语法错误;

而TP框架则需要自己手动完成防止跨站攻击的代码;

3.Laravel是一个重路由的框架(5.4),所有的功能都是由路由发起的,哪怕没有控制器方法,只要写了路由就能够访问,thinkPHP(3.2),必须要有控制器方法才能正常访问;

4.laravel具有强大的社区化扩展,(composer扩展自动加载);

5.laravel具有强大的Blade模版引擎;

6.中间件,Laravel特点,可以实现访问前后的处理,例如请求和返回,权限认证等;

7.条件判断语句书写方式的差异:

Laravel框架里 if else判断语句和foreach语句 书写时必须以@if开头  以@endif结尾,如果没有则报语法错误,@foreach @endforeach同理;

而TP框架则和PHP语法规则使用方式一致直接ifesle语句判断和foreach循环遍历

Laravel里内置了大量的方法供开发者使用,在实际应用中更接近于”让对象完成一切”的开发思想,比如在后台表单验证的时候,Laravel内置了大量的验证方法,例如对用户名的验证:我们使用可以validate方法里’username’=>’required'(不能为空)|alpha_dash(必须数字字母下划线)|between:6,18(在多少位数之间);还内置了例如email;same:字段名;diff:字段名等大量的方法极大的提高了开发速度;

加密方式 在TP框架中 我们对用户名密码进行加密时使用md5();的方式进行加密,但md5的缺点在于其可以逆向破解,而且在同等规则下同样的密码md5加密出的字符串是有可能出现相同的,这就降低其安全性;

但在Laravel框架中内置了”哈希”Hash加密单向加密方法,且同样的参数加密出的字符串是绝对不会出现相同的情况 这就提高了安全性;

在实际开发中我们常常遇到这样的问题,就是开发地点不固定,这就造成了我们需要频繁的更改数据库配置,给开发工作造成了麻烦,TP依然没有避免这个”灾难”;在laravel框架中,.env环境文件的出现解决了这个麻烦,我们只需要在不同的工作地点配置好.env文件就不必再进行配置,因为无论是git还是svn ” .env是不会随着文件一起提交到服务器的”。