php各种框架优缺点及laravel框架与thinkPHP框架的区别
⼀、ThinkPHP
ThinkPHP(FCS)是⼀个轻量级的中型框架,是从Java的Struts结构移植过来的中⽂PHP开发框架。它使⽤⾯向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各⽅⾯都⽐较⼈性化,熟悉J2EE的开发⼈员相对⽐较容易上⼿,适合php框架初学者。 ThinkPHP的宗旨是简化开发、提⾼效率、易于扩展,其在对数据库的⽀持⽅⾯已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的⽀持。ThinkPHP有着丰富的⽂档和⽰例,框架的兼容性较强,但是其功能有限,因此更适合⽤于中⼩项⽬的开发。
优点
1.借助成熟的Java思想
2.易于上⼿,有丰富的中⽂⽂档;学习成本低,社区活跃度⾼
3.框架的兼容性较强,PHP4和PHP5完全兼容、完全⽀持UTF8等。
4.适合⽤于中⼩项⽬的开发
5.从thinkphp3.2.2引⼊composer包管理⼯具
缺点
1.对Ajax的⽀持不是很好;
2.⽬录结构混乱,相⽐其他框架⽬录结构要差⼀点;
3.上⼿容易,但是深⼊学习较难。
⼆、Yii
Yii 是⼀个基于组件的⾼性能php框架,⽤于开发⼤型Web应⽤。Yii采⽤严格的OOP编写,并有着完善的库引⽤以及全⾯的教程。从MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了今⽇Web 2.0应⽤开发所需要的⼏乎⼀切功能。事实上,Yii是最有效率的PHP框架之⼀。
优点
1.纯OOP
2.⽤于⼤规模Web应⽤
3.模型使⽤⽅便
4.开发速度快,运⾏速度也快。性能优异且功能丰富
5.使⽤命令⾏⼯具。
6.⽀持composer包管理⼯具
缺点:
1.对Model层的指导和考虑较少
2.⽂档实例较少
3.英⽂太多
4.要求PHP技术精通,OOP编程要熟练!
5.View并不是理想view,理想中的view可能只是html代码,不会涉及PHP代码。
三、laravel
优点
1.laravel的设计思想是很先进的,⾮常适合应⽤各种开发模式TDD, DDD 和BDD
2.⽀持composer包管理⼯具
3.集合了php ⽐较新的特性,以及各种各样的设计模式,Ioc 容器,依赖注⼊、门⾯、契约。测试功能等。
缺点
1.基于组件式的框架,所以⽐较臃肿
四、CodeIgniter
优点:
1.Code Igniter推崇“简单就是美”这⼀原则。没有花哨的设计模式、没有华丽的对象结构,⼀切都是那么简单。⼏⾏代码就能开始运⾏,再加⼏⾏代码就可以进⾏输出。可谓是“⼤道⾄简”的典范。
2.配置简单,全部的配置使⽤PHP脚本来配置,执⾏效率⾼;
3.具有基本的路由功能,能够进⾏⼀定程度的路由;
4.具有初步的Layout功能,能够制作⼀定程度的界⾯外观;
5.数据库层封装的不错,具有基本的MVC功能.
6.快速简洁,代码不多,执⾏性能⾼,
7.框架简单,容易上⼿,学习成本低,⽂档详细;
8.⾃带了很多简单好⽤的library,框架适合⼩型应⽤.
缺点:
1.本⾝的实现不太理想。
2.内部结构过于混乱,虽然简单易⽤,但缺乏扩展能⼒。
3.把Model层简单的理解为数据库操作.
4.框架略显简单,只能够满⾜⼩型应⽤,略微不太能够满⾜中型应⽤需要.
评价:
总体来说,拿CodeIgniter来完成简单快速的应⽤还是值得,同时能够构造⼀定程度的layout,便于模板的复⽤,数据操作层来说封装的不错,并且CodeIgniter没有使⽤很多太复杂的设计模式,执⾏性能和代码可读性上都不错。⾄于附加的library 也还不错,简洁⾼效。
五、Zend Framework
优点:
1.⼤量应⽤了PHP5中⾯向对象的新特征:接⼝、异常、抽象类、SPL等等。这些东西的应⽤让Zend Framework具有⾼度的模块化和灵活性
2.严格遵循“针对接⼝编程”和“单⼀对象职责”等原则
3.官⽅出品,⾃带了⾮常多的library,框架本⾝使⽤了很多设计模式来编写,架构上很优雅,执⾏效率中等
4.MVC设计,⽐较简洁
5.具有路由功能,配置⽂件⽐较强⼤(能够处理XML和php INI)
6.能够直观的⽀持除数据库操作之外的Model层(⽐ CodeIgniter 和 CakePHP 强),并且能够很轻易的使⽤Loader功能加载其他新增加的Class
7.Cache功能很强⼤,从前端Cache到后端Cache都⽀持,后端Cache⽀持Memcache、APC、SQLite、⽂件等等⽅式
8.数据库操作功能很强⼤,⽀持各种驱动(适配器)
9.⽂档很全,在国内社区很成熟
缺点:
1.MVC功能完成⽐较弱,View层简单实现(跟没实现⼀样),⽆法很强⼤的控制前端页⾯.
2.没有⾃动化脚本,创建⼀个应⽤,包括⼊⼝⽂件,全部必须⾃⼰⼿⼯构建,⼊门成本⾼
3.对于简单和⼩型的项⽬来说,反⽽因为在框架中应⽤了⼤量⾯向对象设计,对开发者提出了更⾼的要求,间接增加了项⽬的开发成本
目前行的php开发工具有
评价:
作为官⽅出品的框架,Zend Framework的野⼼是可以预见的,想把其他框架挤⾛,同时封装很多强⼤的类库,能够提供⼀站式的框架服务,并且他们的开发团队很强⼤,完全⾜够有能⼒开发很强⼤的产品出来,所以基本可以确定的是Zend Framework前途⽆量,如果花费更多的时间去完善框架。同样的,Zend Framework架构本⾝也是⽐较优雅的,说明Zend官⽅是有很多⾼⼿的,设计理念上⽐较先进,虽然有⼀些功能实现的不够完善,⽐如View层,⾃动化脚本等等,这些都有赖于未来的升级
六、CakePHP
优点:
1.最类似于RoR的框架,包括设计⽅式,数据库操作的Active Record⽅式
2.设计层⾯很优雅,没有⾃带多余的 library,所有的功能都是纯粹的框架,执⾏效率还不错
3.数据库层的 hasOne, hasMany功能很强⼤,对于复杂业务处理⽐较合适
4.路由功能,配置功能难度适中
5.⾃动构建脚⼿架(scaffold)很强⼤,适合中型应⽤
6.基本实现过了MVC每⼀层
7.具有⾃动操作命令⾏脚本功能
8.⽂档⽐较全,学习成本中等
缺点:
1.CakePHP⾮常严重的问题是把Model理解为数据库层操作,严重影响了除了数据库之外的操作能⼒
2.cache功能略显薄弱
3.配置功能稍嫌弱
4.不适合⼤型应⽤,只适合中型应⽤,⼩型应⽤来说略微的学习成本⾼了点.
评价:
总体来说CakePHP框架代表了PHP框架很重要的⼀个时代和代表,并且⽬前发挥着很重要的作⽤,不少⾃⼰写的框架都模仿了CakePHP的⽅式,是个⾥程碑式的产品;CakePHP透露着RoR的敏捷开发⽅式和把数据库操作认为是唯⼀Model的设计思想,作为开发快速应⽤和原
型是绝好的⼯具;同样,⽤来做Web2.0⽹站的开发框架,也是值得选择的
七、Symfony
优点:
1.完整实现了MVC三层
2.封装了所有东西,包括 $POST,$GET 数据,异常处理,调试功能,数据检测
3.包含强⼤的缓存功能
4.⾃动加载Class,能够很随意的定义各种⾃⼰的class
5.强⼤的语⾔⽀持
6.具有很强⼤的view层操作,能够零碎的包含单个多个⽂件
7.⾮常强⼤的配置功能,使⽤xml配置能够控制所有框架和程序运⾏⾏为
8.包含强⼤的多层级项⽬和应⽤管理:Project --> Application --> Module --> Action,能够满⾜⼀个项⽬下多个应⽤的需要,并且每层可以定义⾃⼰的类库,配置⽂件,layout
9.⾮常强⼤的命令⾏操作功能,包括建⽴项⽬、建⽴应⽤、建⽴模块、刷新缓存等等
10.Symfony绝对是开发⼤型复杂项⽬的⾸选,因为使⽤了Symfony,将⼤⼤节约开发成本,并且多⼈协作的时候,不会出现问题,在Project 级别定义好基础Class以后,任何模块都能够重⽤,⼤⼤复⽤代码.
缺点:
1.最⼤的问题也在于使⽤了太多风格迥异的开源项⽬来组合成框架
2.由于Mojavi和Propel本⾝都相当复杂,因此Symfony的结构⾮常复杂,难以理解和学习
3. 缓存功能⽆法控制,每次开发调试总是缓存,需要执⾏ symfony cc,symfony rc来清除和重建缓存
4.效率不是很⾼,特别是解析模板和读取配置⽂件的过程,花费时间不少
5.学习成本很⾼,并且国内没有成熟的社区和中⽂⽂档
评价:
Symfony绝对是企业级的框架,唯⼀能够貌似能够跟Java领域哪些强悍框架抗衡的东西;强悍的东西,
⾃然学习复杂,但是相应的对项⽬开发也⽐较有帮助,⾃然是推荐复杂的项⽬使⽤Symfony来处理,觉得是值得,后期的维护成本⽐较低,复⽤性很强。相应的如果使⽤Symfony的应该都是⽐较复杂的互联⽹项⽬,那么相应的就要考虑关于数据库分布的问题,那么就需要抛弃Symfony⾃带的数据库操作层,需要⾃⼰定义,当然了,Symfony⽀持随意的构造model层
总评:
以上数款框架,各有特⾊,⽽且都是开源项⽬,不过框架针对的项⽬不⼀样,⼀般来说:
1.⼩型项⽬:CodeIngiter
2.中型项⽬:CakePHP、Zend Framework、Laravel、Thinkphp
3.⼤型重量级项⽬:Yii、Symfony、Laravel
以上划分也不绝对,在项⽬选型的时候,要充分考虑框架的可以定制性、扩展性,因为每个项⽬都⽆法确定你是否会随着需求的变化进⾏改变
--------------------------------------------------------------------------------------------------------------------------------------
主要区别:(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是不会随着⽂件⼀起提交到服务器的";
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论