PHP是世界上最流行的编程语言之一,并且最近PHP7的发布让这门服务器端的编程语言比以往更加的强大和稳定。
PHP广泛应用于大型项目,例如Facebook使用PHP来建立和维护他们的内部系统。Wordpress使用PHP作为它的内核使其占据了26%的web项目。目前82%的web网站使用PHP作为其服务器端的开发语言(据Web Tecnology Surveys网站调查)
在这篇文章内,我们将一起来分析3中最流行的PHP框架:Symfony、Laravel、和Yii。我门通过说明怎么比较它们来帮助大家选择一个最适合自己需求的框架。
为什么选择使用PHP框架?
是什么让我们使用框架而不是使用纯粹的php原生语言来开发我们的应用?使用框架的一些好处如下:
- PHP框架使开发过程更快,例如,你不必为从数据库中查询数据去写复杂的查询语句。PHP框架提供了CRUD操作(create创建,read读取,update更新, delete删除)
- 框架让开发者更加容易的扩展系统
- 比起普通的php应用代码的维护更简单。应用的代码更加的精简并且易操作
- MVC模型保证来快速的开发
- 对于常见的安全威胁,框架能更好的保护应用web应用的安全
- don‘t repeat yourself(不要重复)原则保证使用最少的代码发挥最大的作用
以上的好处很显著以致于不容忽视。即使使用原生的PHP也能用来开发任何的应用,但是当前的开发规范要求使用工具和时间管理的技巧来满足市场的需要。
怎样选择PHP框架
回答下面的一些问题能帮助你选择适合自己的框架:
- 这个框架有哪些特点和功能?(它提供了我的需求吗?)
- 这个框架学习容易吗?
- 这个框架可扩展行强吗?
- 这个框架的核心团队是否在积极的开发和维护它呢?
- 这个框架提供长期支持吗?
- 这个框架有强大的社区支持吗?
Symfony、 Laravel和Yii
在深究技术细节之前,我们先来整体介绍下这3个竞争者
Symfony
Symfony 是一套可复用的PHP组件,这些组件可以使开发者开发出易扩展和高性能的应用。有30个组件可供选择,开发者有完全的自由在RAD环境中实验和工作。Symfony 的APIs也使得它很容易的与第三方应用整合,它也能与流行的前端框架一起使用,比如AngularJs。
很多的流行项目包括Drupal和phpBB也使用了Symfony框架。实际上目前最流行的框架Laravel也是建立在Symfony上。
Laravel
Laravel作为“为web艺术家而生的框架”被广泛使用,它提供了极其优秀的社区并获得了最流行的框架的称号。
在2015年5月 Laravel 发布声明 Laravel5.1版本将提供2年的长期支持。2015年11月5.2版本推出。很多托管提供商提供Laravel支持并提供Laravel应用的托管解决方案。
Yii
Qiang Xue 在2008年推出了Yii框架,Yii框架安全、快速、性能卓越。Yii使用Composer作为它的php依赖管理工具来帮助处理不同的依赖和其安装。得益于惰性加载技术的使用,Yii框架是目前速度最快的框架。
Yii另一个伟大的特性是整合来JQuery。这种整合使得前端的开发者开始的拥抱它,并且它使用脚手架生成代码,类似与Symfony。Yii也使用组件来快速开发应用。
怎样比较它们
这3个框架开发Web2.0应用都非常的好,但是各自服务与不同的目的。让我们看看它们的特性以及它们目前的状态。
模版引擎
模板引擎在编写前端代码时,简化开发者的工作并提供更好的功能。模版引擎提供的特性包括自动html代码转义和过滤、添补原生php留下的间隙。
Symfony Twig 模板系统
Twig是一个PHP的现代模板系统。Symfony利用Twig的优势使开发者写出更加干净、简洁的代码。
详见Twig网站学习更多的关于twig的特性
Laravel Blade 模板系统
不像其他的模板系统,Blade让你在视图中是用PHP代码。并且Blade对应用的性能影响几乎为零,因为视图文件都是以.blade.php
作为扩展名。视图文件所有的代码在程序运行中都转换为了原生的php。
Yii 默认模板系统
Yii默认没有使用任何第三方模版系统,但是这并不意味者它缺少对模版引擎的支持。模板引擎的选择取决去开发团队。Yii推荐使用Twig和Smarty模板引擎。介于Symfony使用的是Twig,所以如果你以前使用过Symfony,你可能想在你的下一个Yii框架中使用Twig。
这里没有明显的优胜者。3个框架都使用模版引擎使前端代码的的书写和维护更简单。Yii的一个小优势是它没有提前预设一个模板系统。
框架不同点
每个框架都不一样。Symfony致力于提供可复用的组件和提供最好的模块化支持。Symfony也使用模型和控制器来开发web应用,对于新的开发者这看起来有点老套。但是确实好用。对于模块化框架来说Symfony是一个很好的例子。你可以使用模块化的方式在你的项目中使用Symfony提供的30个组件。
Yii框架使用MVC模型(Symfony也提供对MVC的支持)
Symfony 可以用来快速开发和用于复杂项目。即便有对哪个框架最适合开发复杂项目有争议,Symfony相对于其他框架显示出了卓越的复杂处理能力
Yii也使用组件但是不像Symfony一样模块化。Laravel不像另外2个框架一样提供激进的模块化支持。
如果你正在寻找一个模块化的框架,就去选择Symfony,其他的话,Laravel和Yii都是很好的选择。
安装
这三个框架提供了许多安装程序。如果你用Composer去处理安装包,你会很高兴发现,所有的框架都可以通过Composer安装
对Symfony而言,Composer的作用更加关键。通过使用PHPComposer依赖管理器,组件处理的想法能更好的实现。
各个框架还有其他的安装方式。例如,您可以使用简单的归档方法安装框架。
安装完成后,Yii为你提供了一个Web应用程序和一个基本模板来工作。Symfony2还提供了一个开始的演示程序。
Laravel通过Composer的composer create-project
命令或者通过Laravel安装器也能简单的进行安装。详情请查看laravel安装指南。
快速开发
从公司或客户的角度来看,快速地将应用程序推向市场以满足消费者的需求并击败竞争对手是很重要的。 symfony有一个强大社去支撑,并作为一个健壮的框架而凸显出来。Laravel正在迅速成长,但在被视为PHP实际的开发选择之前,Laravel还有很长的路要走。 另一方面,如果你不认识任何PHP框架,又想尽快上手,那么可以考虑Laravel。Laravel有一个简单的学习曲线,你会发现网上很多教程来帮助你开始。 Yii的性能有一个新的水平,并为快速的的代码生成和开发提供了代码脚手架。
性能
任何应用程序的性能只关系到它是否是一个使用关键数据的实时应用程序。有多少依赖高性能的web应用程序?并不是很多,但是框架的性能在许多项目中可以起到关键的作用。
社交网络是实时事件应用的首选例子,我们的一个明星的产品-jadson使用yii2建了一个移动社交网络,当初我们为编写高性能的应用而选择一个最好的框架时。Yii作为最快的PHP框架而凸显出来。
Laravel的性能是一个颇有争议的问题。它是最慢的,但这有关系吗?你会找到在线资源去加速它的性能,包括GitHub上的指南让你的laravel应用变得更快。
数据库支持
Symfony 2提供了更好的数据库支持。你可以使用一组数据库,包括NoSQL和DynamoDB。 Yii和Laravel在这方面也同样有用,但他们支持的数据库比symfony的少。每个框架支持的数据库如表1所示。
社区和资源
开源框架持久性的一个重要预测因素是其社区的力量。这3个框架都有稳定而坚实的社区,尽管Symfony的社区可能更成熟一些,但是社区在进化,所以对社区的未来的动态预测很难。 说到学习资料和文档,Laravel突出出来来,尽管Symfony和Yii并没有落后很多。
可扩展性
框架是可以通过扩展或包进行扩展的结构,用来改进了它们的功能和范围。说到扩展,Laravel是赢家。packalyst一个laravel扩展包的库提供超过9000的扩展包。另一方面 Yii和symfony分别提供了2800左右的扩展和2830的包,Laravel提供来超过3被的扩展。Laravel在这方面似乎是最好的框架。
相同点
我们已经研究了框架之间的差异。现在让我们看看它们的相似之处:
- 3个框架都是全栈的php框架,从前端代码书写到后段数据获取,都提供了构建web应用的功能
- 项目都是开源的,并且都托管在GitHub上,这使得任何人都能容易的贡献自己的代码
- 所有的框架都有很好的文档注释并都与一个庞大的社区支持
- 都支持ORM(Object Relationship Mapping 对象关系映射)。ORM非常适合编写应用程序的面向对象代码。
- 对于开发Web2.0应用都足够强健、安全和可靠
仍然迷惑?也许这些列表有助于你缩小选择范围:
Symfony:
- 提供长期支持版本
- 带有大量的特性
- 它是目前最稳定的框架
- 基于组件的框架,提供可扩展的模块化功能
- 有强大的社区支持和丰富的学习资源
Yii:
- 天生带有ajax支持
- 因为提供更快的操作,它是开发实时应用的最好选择
- 高度可扩展
- 错误处理强大
- 有利于开发Restful风格Web服务
- 有强大的社区支持和丰富的学习资源
Laravel:
- 最受欢迎的框架
- 支持Composer管理扩展包
- 单元测试做得很好
- 提供了大量的扩展包来扩展框架的功能
- 有强大的社区支持和丰富的学习资源
结论
在Symfony与Laravel与Yii的竞争中,3个框架都是极好的选择,都为开发者提供来全栈的开发环境。对于我来说,作为一种新兴的且没有停止的迹象的明星-Laravel是一个胜利者。