PHP的阵营向来有两种声音,一个说“PHP是世界上最好的语言”,一个说“PHP出于糟糕的设计”,现在对于说这些的,其实我们正常人早就麻木了,这里的正常人,指的是正常工作的程序员,因为我们知道,只有啥都不懂,喜欢打嘴炮的新手,才去跟风这些说法,真正忙的人没工夫理会这些,我们只想把事情做好。

当然,更重要的是,随着我们的成长,PHP也在成长,今天的PHP已经不是过去的那个PHP了,PHP自从5.*时代已经进化了很多,我们越来越喜欢用“现代PHP”来称呼它。

当然了,任何一个语言都有其糟糕的一面,PHP也不例外:很多核心函数依然有不统一的方法,仍然有令人困惑的配置参数,最难办的是,依然有大量的开发者在写着糟糕的代码,他们可能不得不这样,或者单纯不知道怎样可以写的更好。

今天,我们想用最新的数据和视角,来看看PHP 2019的现状,看看能否刨除些以往的偏见,或者给我们增添更多的信心。我们想更多关注那些PHP已经改变了的方面,更多关注PHP如何让我们能够写出简洁、易于维护的代码。相信,如果以往PHP曾给你留下过不好的印象,今天你会惊讶于PHP这些年来的改进和完善:

  • PHP语言本身处于活跃开发阶段,每年都会发布一个新的大版本
  • 从PHP5后,性能翻了两倍,如果不说是三倍的话
  • PHP有异常活跃和丰富的框架、组件和平台生态
  • 过去几年里,PHP添加了大量新的特性,语言本身在不断演进
  • 很多相关工具在过去几年里日渐成熟,并且持续成长

PHP历史回顾

PHP现在的最新版本是7.3, 7.4将会在2019年末发布,PHP 8.0是7.4之后的下个版本。

自从5.*时代以来,核心团队尽量保持着年度版本发布的频率,并且在过去的四年里成功做到了这一点。

一般来说,每一个新的版本都会有两年的活跃支持,然后再有一年的安全支持。这样做的目的,是想促使PHP开发者们尽量跟上最新的版本,因为每年更新一下版本,只涉及小的改动,这就比跨越好几个版本去升级要容易的多,比如说一下子从5.4升到7.0,这期间你就无法确定会经历什么了。

如果你想看PHP现阶段的支持周期,可以看看这个官方链接://www.php.net/supported-versions.php

PHP的性能

在5.*的时代,PHP的性能只能往好了算是平均水平,但是到了7.0,大量的PHP核心代码进行了从头的重写,最终带来了两倍或三倍的性能提升。PHP之父 Rasmus Lerdorf 曾在2018年说,PHP 7.0删掉了原先三分之一的代码,同时保持着对之前版本的兼容,没有因此丢掉任何功能,而且这只是重构,还没有搞JIT和HHVM,没开始用特殊或极端的性能提升手段。由此,我们也完全可以预期,未来版本的PHP,依然有巨大的性能提升空间。

当然空说无凭,可以看一些测试数据,庆幸的是很多人都已经测评过PHP的性能了

file

file

file

如果你想看更多PHP框架或cms在不同版本PHP之间的测评数据,可以看看这个文章://kinsta.com/blog/php-benchmarks/

由于PHP 7的巨大性能提升,PHP的很多web程序和框架,就可以和其他语言的web框架进行对比了,甚至在很多地方,还要比其他语言的要更好。同样的,可以看看下面的详尽测评:

file

这是一个框架延迟性的测评,可以看到PHP的流行框架是处在绝对前列的,在这方面java、go、python的一些框架,很多都是垫底的,尤其是国内在乱追捧的django直接垫底。

file

这是每秒请求数据,PHP依然要比rails、django、flask这些要高的多,它们依然几乎是垫底的,所以就很不理解国内那些忽悠小白拿django搞web开发的了,请珍重。

想看更多web框架测评数据的,可以看看这个//github.com/the-benchmarker/web-frameworks仓库,上面两个表格截图均是来自这里。

当然了,PHP框架肯定比不了C语言的,以及新一代C,也即Rust,但他们普遍比Rails和Django这些要好非常多,也能够跟ExpressJS相对比。

框架和生态

原来我们提PHP,就必须得提wordpress,全球60%以上的网站都曾是wordpress的,当然现在这个数据肯定依然不低。但是现在,对任何专业的PHP开发者来说,wordpress已经不再能够代表PHP的生态了,绝对不能。

一般而言,现在PHP界主要有两大主流PHP框架:Symfony 和 Laravel,然后还有一些小一些、不那么流行的。当然了,还有Zend, Yii, Cake, Code Igniter这些,但是如果你想知道现代PHP开发的真实样子,你最好擅长这两个主流之一。

这两个框架都有其从组件到产品的庞大生态,不论是后台系统、CRM系统,还是单独的组件,从CI到侧写工具,数不尽的web服务,比如sockets服务、队列管理服务、支付集成方案等。说实在的,根本太多了,无法列举。

当然,这两个框架都是需要进行定制和开发的,如果你只是需要个纯净的内容管理系统,那么WordPress或者CraftCMS依然是不错的选择,它们本身也在越来越好。

要观察PHP目前生态的一个方法是,去看看Packagist这个站点,也即PHP组件的官方仓库平台。它这些年经历了爆炸性增长,每天有2500百万的下载量,这样的一个庞大的活跃量,谁也不能说PHP是弱势的,只是搞小项目的。

下图是一个来自Packagist的组件下载增长趋势:

file

除了框架和CMS,过去几年里,我们也能看到异步框架的成长。有很多框架或服务,用PHP或其它语言写的,能够允许我们运行真正的异步PHP,一些知名的包括Swoole, Amp 和 ReactPHP。

由于我们已经开始了异步世界的探险,例如web sockets或者有大量IO的应用,这些在PHP世界里越来越是个事儿了,越来越相关了。

当然了,在PHP核心开发团队的内部邮件列表里,已经在讨论将libuv添加到PHP核心中,libuv就是nodejs异步功能所依赖的底层库。

目前的PHP语言本身

虽然目前async和await功能还没添加上,但是过去几年间,很多改进都加到了PHP里,下面是一个不完全的PHP新特性列表:

  • 短闭包(Short closures)://stitcher.io/blog/short-closures-in-php
  • Null合并运算符://stitcher.io/blog/shorthand-comparisons-in-php#null-coalescing-operator
  • Traits://www.php.net/manual/en/language.oop5.traits.php
  • 属性类型化(Typed properties)://stitcher.io/blog/new-in-php-74#typed-properties-rfc
  • 扩展运算符(Spread operator)://wiki.php.net/rfc/argument_unpacking
  • JIT编译器(JIT compiler)://wiki.php.net/rfc/jit
  • 外部函数接口(FFI)://wiki.php.net/rfc/ffi
  • 匿名类://www.php.net/manual/en/language.oop5.anonymous.php
  • 声明返回类型://www.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration
  • 现代加密库://wiki.php.net/rfc/libsodium
  • 生成器://wiki.php.net/rfc/generators
  • 很多其它特性://www.php.net/ChangeLog-7.php

除了语言特性,让我们也来看看如今PHP的核心开发过程:有一个活跃的核心志愿者团队,他们推动着PHP语言开发和前进,同时社区成员也可以提出RFC。

接下来,这些RFC 会在“内部”邮件列表中讨论,邮件列表可以在线阅读。在新的语言特性被添加之前,必须进行投票。只有得到三分之二支持的RFC才被允许添加进核心。

允许投票的可能有约100人,但是并不要求每个人都对每个RFC投票。核心团队的成员当然可以投票,因为他们必须维护代码库。除了他们之外,还有从PHP社区中单独挑选出来的人可以投票。这些人包括PHP文档的维护者、整个PHP项目的贡献者以及PHP社区中的杰出开发人员。

虽然大多数核心开发都是在自愿的基础上完成的,但最近JetBrains雇佣了一名核心成员Nikita Popov来做全职开发工作。另一个例子是Linux基金会最近决定投资Zend Framework开源框架。这样的雇佣和注资确保了PHP未来发展的稳定性。

工具

除了PHP核心本身,在过去的几年里,我们也看到了相关工具的增加。首先我们想到的是静态代码分析工具,像Vimeo团队开发的Psalm,以及PhanPHPStan

这些工具将静态分析你的PHP代码并报告任何类型错误,以及可能导致的bug等等。在某种程度上,它们提供的功能可以与TypeScript相媲美,尽管PHP现在不提供编译转换(transpile),所以不能用自定义语法。

尽管这意味着我们需要依赖docblocks,但是PHP之父Rasmus Lerdorf确实提到了在核心中添加静态分析引擎的想法。虽然潜力巨大,但这也是一项艰巨的任务。

说到编译转换(transpiling),这是受到JavaScript 社区的启发,目前 已经有人开始自行扩展PHP语法格式,一个名为Pre的项目就是这样做的,它允许新的PHP语法格式转换为普通的 PHP 代码。

虽然这个想法已经在 JavaScript 中被证明可行,但是只有先提供了适当的IDE和静态分析支持,它才能在PHP中工作。这是一个非常有趣的想法,但它必须经历一个成长过程才能称为“主流”。

结语与课程推荐

当然了,语言只是个工具,而好的编程实践是与具体的某一门语言无关的,糟糕的代码无论放到哪个框架和语言里,都依然是糟糕的代码。当然这一点,可能在PHP这里更突出一些,很多人依然在用PHP乱搞,尤其是在国内,希望他们能快速成长,经历一些严肃系统的学习,而不是一直自己乱倒腾,或者满足于网上些免费但糟糕的教程,就以为那是真正的编程本身。

作为严肃的PHP开发者,尤其是现如今借助于laravel,我们可以很自豪地说,我们能够用PHP来开发优雅的、可靠的、可维护的和高质量的web应用,我们的雇主与客户也都一样,他们对最终的结果都非常满意。

如果你是一个web编程爱好者,还在观望是否要用PHP,或者在忍受一些PHP的糟糕代码,或者干脆不知道怎样才能接触到简洁优雅的现代PHP,包括说你已经知道laravel了,但是还是无法体验起真正的优雅,那么我们极力向你推荐这门国内最好的laravel入门兼实践课程《Laravel优雅实战入门:第二版》

file

课程是从16年就开始开发的,历时两年,目前已经升级到了第二版,用的是新近的laravel 5.7,完全兼容最新的laravel 5.8,最关键的是,这里面教的,完全都是最正宗最优雅的laravel用法,处处教你如何用一两行代码解决正常的逻辑,让你从一开始就养成好的代码习惯,从此跟乱糟糟的代码说再见。两年里,我们的课程已经帮助上千名小伙伴走上laravel优雅之路,很多小伙伴因为这个课程找到了自己满意的工作,下一个会是你吗?

当然了,如果你觉得自己已经有足够的基础了,laravel用的像模像样了,也可以关注我们进阶课程,我们还有laravel和vuejs结合开发的课程《Laravel&Vue深度整合实战第二版》

file

更有非常高级的laravel源码分析兼实战课程《Laravel底层实战兼核心源码解析》

file

这还不止的,更多精品好课欢迎到我的网易课堂主页查看【霹雳神主页】

更进一步的,如果你更厉害,或者更愿意学习,将来想成为行业大神,那么我们还给你准备了更高级的【国际IT专场会议】,在这里我们为你翻译整理了IT界的各大国际会议,PHP的作者、laravel的作者、symfony的作者等等国际顶尖大牛亲自给你讲解IT技术,多学习几个以后,你觉得自己离大神还远吗?专场链接://www.pilishen.com/casts

filefile

本文翻译和改编自//stitcher.io/blog/php-in-2019