V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pilishen
V2EX  ›  问与答

怎样选择适合自己 PHP 框架

  •  
  •   pilishen · 2018-04-15 10:38:52 +08:00 · 3343 次点击
    这是一个创建于 2200 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 框架

    回答下面的一些问题能帮助你选择适合自己的框架:

    1. 这个框架有哪些特点和功能?(它提供了我的需求吗?)
    2. 这个框架学习容易吗?
    3. 这个框架可扩展行强吗?
    4. 这个框架的核心团队是否在积极的开发和维护它呢?
    5. 这个框架提供长期支持吗?
    6. 这个框架有强大的社区支持吗?

    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 是一个胜利者。

    本文为翻译文档-- 原文链接

    20 条回复    2018-04-16 00:23:30 +08:00
    MeteorCat
        1
    MeteorCat  
       2018-04-15 12:09:55 +08:00 via Android   ❤️ 1
    不吹会死
    loading
        2
    loading  
       2018-04-15 12:14:26 +08:00
    这不就是找 block 吗
    toxicant
        3
    toxicant  
       2018-04-15 13:06:58 +08:00 via iPhone
    .... 话说。 框架不就是搭个架子 剩下的还不是得自己来吗,而且大部分都是 mvc 也不是理解不了,领导要求弄什么就弄什么我觉得就 ok 吧
    R18
        4
    R18  
       2018-04-15 13:08:52 +08:00 via Android
    人生苦短 我用 CI
    gouchaoer
        5
    gouchaoer  
       2018-04-15 13:16:14 +08:00
    这么说吧,封装越厉害的确可复用性越大,可是扩展就会月困难,性能越低
    所以我选择 CodeIgniter
    askfilm
        6
    askfilm  
       2018-04-15 13:31:33 +08:00
    说的很好
    askfilm
        7
    askfilm  
       2018-04-15 13:34:59 +08:00
    @MeteorCat 然而并没有吹,php 的生态远比你想像的好
    dobelee
        8
    dobelee  
       2018-04-15 13:39:18 +08:00 via Android
    习惯自己撸一个。这些框架都太重,容易被爆出漏洞,又不能修改底层,改了就不能升级了。🙈
    askfilm
        9
    askfilm  
       2018-04-15 13:46:39 +08:00
    @gouchaoer 这个你就说错了, 有没有想过为什么会有高级框架存在呢? 越高级的框架开发速度也就越快(这是一个残酷的现实,很多人不愿意承认), 扩展性就越容易。 性能的优化方面也是很到位的(关于 php 的性能优化,非常多的人都不会!)。
    然而很多人学不会这些框架就对这些框架嗤之以鼻, 把自已仅会用的吹上天了。 当然高级框架的使用也就筛选掉了这批人, 也是一件好事。
    还有一件事,CodeIgniter 早早就落后了(当年是挺好), 并且几乎已经死了。。。
    askfilm
        10
    askfilm  
       2018-04-15 13:47:26 +08:00
    @dobelee 你这样说就有点无知了
    askfilm
        11
    askfilm  
       2018-04-15 13:51:22 +08:00
    心塞,我想说一句: 国内有太多的 PHP 开发者都是井底之蛙!
    gouchaoer
        12
    gouchaoer  
       2018-04-15 14:06:08 +08:00
    @askfilm 反正我脑子笨觉得 laravel 太难了,尝试了一段时间后就放弃了;之前一直在看用 symfony3 写的一个叫 phpdish 的玩意儿,看了很久很久还是觉得上手困难放弃转 wecenter 了;你要知道我搞了很多年 php 了,之前对 yii2 比较熟悉的;

    封装越厉害的框架,无法避免的就是上手越困难,开发速度不见得越快,至于你说的性能问题,某些框架就是性能有很大的问题吧; php 本身优点就是上手容易,简单易懂,你框架封装得那么厉害我为啥不去用 sprintboot,那个性能更好?
    Actrace
        13
    Actrace  
       2018-04-15 14:07:55 +08:00
    不用框架的路过。
    shench
        14
    shench  
       2018-04-15 14:31:16 +08:00
    laravel 能把人绕晕。
    abcbuzhiming
        15
    abcbuzhiming  
       2018-04-15 14:36:28 +08:00
    laravel 这东西最大的问题是——既然要搞的这么复杂,我为啥不转去 java spring 呢? laravel 里的那一大堆东西说白 spring 全家桶早就搞过了。我为啥非要留在 PHP 里,用 PHP 就是为了简单
    juneszh
        16
    juneszh  
       2018-04-15 15:00:08 +08:00
    既然 PHP 有 composer 了,功能都是像乐高一样组合,配一个轻量级 RESTful 框架就足够了,推荐用 flight 或者 slim
    ioven
        17
    ioven  
       2018-04-15 16:24:41 +08:00
    CodeIgniter 现在支持 php7 了?
    dobelee
        18
    dobelee  
       2018-04-15 18:11:35 +08:00 via Android
    @askfilm 正常发表意见就说人无知,还自我膨胀嘲笑国内开发者,心术不正。
    icy37785
        19
    icy37785  
       2018-04-15 18:28:12 +08:00 via iPhone
    @askfilm 说实话,你上面的回复恰恰显示了你的无知。
    MonoLogueChi
        20
    MonoLogueChi  
       2018-04-16 00:23:30 +08:00 via Android
    不知道怎么选的时候,就选用户最多的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2572 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:56 · PVG 23:56 · LAX 08:56 · JFK 11:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.