PHP已不再是当年那个“设计糟糕”的语言

  PHP每年都会推出一个新的版本;

  自PHP 5代之后,其性能不断提升;

  有框架、包和平台组成的活跃生态系统;

  过去几年间,PHP添加了许多新的特性,且现在仍在持续演进;

  许多工具如静态分析器也越发成熟,未来也将继续发展。

  更新:很多人希望我能够展示一下实际代码,这是我其中一个业余项目的源代码,它是用PHP和Laravel写的,另外还有一个是我们在办公室负责维护的上百个OSS包的列表。

  https://github.com/brendt/aggregate.stitcher.io

  https://spatie.be/opensource/packages

  回顾历史

  让我们先快速回顾一下PHP的版本发布周期。现在PHP的版本是7.3,预计2019年末将发布PHP 7.4,7.4之后的版本将会是PHP 8.0。

  从5.X版本之后,PHP核心团队一直在努力每年发布一个新版本,并且在过去的4年间,这一目标一直完成得很好。

  大致来说,每个新版本都会用2年时间进行积极地支持,然后用一年进行“安全修补”工作。这样做的目的是促使PHP开发者尽可能保持最新状态,例如每年都升级比从5.4直接跳到7.0要简单得多。

  PHP具体的版本发布情况,可以查看:

  https://www.php.net/supportedversions.php

  搞清楚PHP的发展历程后,我们来谈谈大家对PHP的常见误解。

  PHP的性能

  在5.X版本时代,PHP的性能平均而言是最好的。而在7.0时代,大部分的PHP核心都从零开始重写了,其性能能够达到之前的23倍。口说无凭,幸运的是,有人花了大量时间来测量PHP的性能,Kinsta提供了一个很好的更新列表。

  从7.0版本以来,PHP性能就只升不降。PHP web应用的性能可以和其他语言web框架的性能相提并论,甚至更高。具体测试情况可查看:

  https://github.com/thebenchmarker/webframeworks

  当然,PHP框架的性能还无法超越C和Rust,但是要比Rails或Django好,且能够和ExpressJS相媲美。

  框架和生态系统

  在谈到框架时,PHP已经不再只是WordPress了。作为职业的PHP开发者,我认为,WordPress无法从任何层面代表当今的生态系统。

  总体来说,有2个主要的web应用框架以及一些相对而言较小的框架,如Symfony和Laravel。除此之后,还有Zend、Yii、Cake、Code Igniter等等。

  如果你想了解现代PHP开发究竟是什么样子,那么就需要掌握Symfony和Laravel中的一个,这2个框架都有庞大的生态系统,包含各种包和产品。从管理面板和客户关系管理系统(CRM)到单独的包,从持续集成(CI)到性能监视工具,我们有无数的服务如web套接字服务器、队列管理器、支付集成等等。

  但是,这些框架都是为实际开发而设计的。如果你需要纯粹的内容管理,WordPress和CraftCMS是理想选择,而且它们还会不断优化。

  衡量PHP生态系统目前状态的方法是看一看Packagist,它是PHP主要的包仓库。在过去的时间里,它呈现出了指数式增长的态势,每天2500万左右的下载量,足以说明PHP生态系统已经不再是过去那种弱者了。

  Packagist网站上列出了过去的包和版本数量:

  2019年了,PHP已不再是当年那个“设计糟糕”的语言

  除了应用框架和内容管理系统(CMS)以外,我们还发现,在过去几年,异步框架也崛起了。

  异步框架是指用PHP或其它语言编写的框架和服务器,它们能够让用户运行真正异步的PHP。异步框架的例子包括:Swoole、Amp和ReactPHP。

  由于我们已经进入异步领域,具有大量IO的web套接字和应用等东西在PHP世界中就变得非常重要。

  另外,人们还谈到了内部邮件列表,在邮件列表中,PHP核心开发者讨论了PHP语言的进一步发展,例如增加libuv到核心之中。对于不熟悉libuv的人来说,libuv同Node.js用于实现其所有异步性的库一模一样。

  语言本身

  尽管异步(async)和等待(await)还未面市,但PHP在过去几年已经经过了许多改进,下面便是PHP新特性的不完全列表:

  短闭包

  https://stitcher.io/blog/shortclosuresinphp

  空合并运算符

  https://stitcher.io/blog/shorthandcomparisonsinphp#nullcoalescingoperator

  Traits

  https://www.php.net/manual/en/language.oop5.traits.php

  属性类型

  https://stitcher.io/blog/newinphp74#typedpropertiesrfc

  扩散运算符

  https://wiki.php.net/rfc/argument_unpacking

  JIT编译器

  https://wiki.php.net/rfc/jit

  FFI

  https://wiki.php.net/rfc/ffi

  匿名类

  https://www.php.net/manual/en/language.oop5.anonymous.php

  声明返回类型

  https://www.php.net/manual/en/functions.returningvalues.php#functions.returningvalues.typedeclaration

  现代密码学

  https://wiki.php.net/rfc/libsodium

  Generators

  https://wiki.php.net/rfc/generators

  其他

  https://www.php.net/ChangeLog7.php

  尽管我们的主题是PHP的语言特性,但我还是觉得需要谈一下PHP语言的开发流程。虽然社区被允许提出RFC,但仍有一个活跃的志愿者核心团队在推动PHP的发展。在添加一个新的语言特性之前,必须要进行投票。只有获得2/3多数选票的RFC才能被添加到核心中。

  大约有100个人可以投票,但你不需要给每个RFC投票。核心团队的成员毋庸置疑能够投票,因为他们必须维护代码库。除了他们以外,还有一群人是单独从PHP社区中挑选出来的,这些人员包括PHP文件的维护人员,PHP整体项目的贡献者,以及PHP社区中颇具威望的开发者。

  虽然大多数核心开发是由志愿者组成的,但其中一名核心PHP开发者Nikita Popov近期被JetBrains雇佣,并全职负责该语言的开发。另外一个例子是Linux基金会决定投资Zend框架。上述这些雇佣和收购行为确保了未来PHP开发的稳定性。

  工具

  除了核心本身,我们还目睹了过去几年间工具的增长。首先进入我脑海的是静态分析器如Vimeo发明的Psalm,以及Phan和PHPStan。

  这些工具能够静态分析PHP代码,并且报告打字错误、可能的bug等等。在某些方面,它们提供的功能足以和TypeScript相媲美,但目前PHP还没有被转编译(transpile),因此它并不支持定制句法。

  虽然这意味着我们必须依赖于文档块,但PHP的最初发明者Rasmus Lerdorf提出了将静态分析引擎添加到核心之中的想法。这个想法潜力巨大,但任务量着实不小。

  提到转编译,由于受到JavaScript社区的启发,有许多人试图将PHP句法延伸到用户空间中。一个名叫Pre的项目就做了这件事情:它支持新的已经转编译为普通PHP代码的PHP句法。

  虽然这一想法已经在JavaScript中得以实现,但只有在提供了适当的集成开发环境(IDE)和静态分析支持后,它才能在PHP工作。这一想法非常有趣,但还必须不断完善,才能变成“主流”。

  结束语

  尽管PHP还有很多缺点和遗留问题,但我可以充满信心地说,我喜欢使用它。就我的经验来看,它可以创建可靠、可维护和高质量的软件。如果使用得当,PHP对于web开发来说是个非常棒的选择。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容