分享

2020 年的 PHP 回顾与展望

 我的下雨天za3m 2020-06-08

  关于一般的Web开发人员和程序员来说,PHP的声誉并不是很好,这现已是众所周知。尽管PHP依然是构建Web应用程序最常用的言语之一,但多年来PHP现已设法给自己赢得了代码库混乱、开发人员缺乏经历、代码不安全、中心库不一致等等的名声。

  尽管许多对立PHP的观点今日依然有效,但也有好的一面:您可以用PHP编写干净、可维护、快速和牢靠的应用程序。

  在这篇文章中,我想让你看到PHP开发技术有利的一面。我想向您展现的是,尽管PHP有许多缺陷,但它依然是一门值得学习的言语。我想让您知道,PHP5时代行将完毕。假如你乐意的话,你可以写呈现代的、干净的PHP代码,而且把10年前的许多烂摊子抛在脑后。

  那么让咱们来看看在曩昔的几年里,这种言语是怎么变化的,乃至是怎么老练的。我想请您把任何偏见放在一边,只花几分钟的时刻,现代的PHP技术可能会让你感到惊奇乃至沉迷。

  前史包袱

  在深入评论细节之前,让咱们回顾一下PHP这门言语现在是怎么一步一步开展的。现在的PHP版别是7.4,PHP8.0将是下一个版别,也便是2020年末。

  自从5.*时代末以来,中心团队试图坚持一致的年度发布周期,而且在曩昔的四年中现已成功做到了这一点。

  一般来说,每个新版别都会得到为期两年的积极支撑,而且会再取得一年的“仅限安全修正”。其方针是激励开发人员尽可能坚持最新状况:例如,每年的小升级比在5.4到7.0之间的跳跃要简单得多。

  终究,PHP5.6是最新的5.*版别,下一个版别是7.0。假如你想知道PHP6发生了什么,你可以点击检查这篇文章1。

  PHP现在的底层开发是由一群社区志愿者完成的,他们中的一些人是由雇主付钱让他们全职从事中心作业的。大多数关于这种言语是怎么开展的评论都是在邮件列表上进行的。

  现在这些前史问题你都有所了解了,让咱们揭秘一些关于现代PHP的常见误解。

  PHP的类型体系

  PHP一开始是一种十分弱的、动态类型的言语,这在当时有它的优点。但是,自从人们开始在较大的项目中运用PHP以来,它的类型体系的缺陷就变得明显起来,而且呈现了对更强的类型支撑的需求。

  今日,PHP是一种相当独特的言语:它依然答应您编写完全动态的弱类型代码,但也有一个更强大的、可选择的类型体系。结合静态剖析东西,如Psalm、Phan和PHPStan,您可以编写安全、强类型和静态剖析的代码。

  例如,看看这段PHP代码,它完全运用了它的现代类型体系:

  publicint$intProperty=2;public?string$nullableString=null;privateBar$bar;publicfunction__construct(Bar$bar){$this->bar=$bar;}publicfunctionwithInt(int$value):self{$clone=clone$this;$clone->intProperty=$value;return$clone;}publicfunctionunionTypes(int|float$input):void{//https://PHP8}}说实话,PHP的类型体系中依然缺少一个重要特性:泛型。他们有期望被加入,但现在还没有什么具体的东西。假如是类型化数组,您将需要依赖文档块来取得恰当的IDE支撑:

  /**@varint[]*/publicarray$arrayOfInts=[];尽管类型化数组是泛型的常见用例,可以运用Docblock处理,但咱们错过了更多功能,由于它们不是…言语。现在还不可。

  PHP的语法

  在语法方面,7.*时代在使PHP成为更老练的言语方面做了许多好事。为了阐明这一点,我在PHP中列出了一个非翔实的新功能列表。

  数组解构:

  [$a,$b]=$array;空合并运算符:

  $value=$object->property??'fallbackifnull';$value=$array['foo']??"fallbackifkeydoesn'texists";空合并赋值运算符:

  publicfunctionget(string$input):string{return$this->cache[$input]??=$this->sanitize($input);}数组扩展:

  $a=[/*…*/];$b=[/*…*/];$mergedArray=[...$a,...$b];可变的函数:

  publicfunctionget(Foo...$foos):void{foreach($foosas$foo){//…}}参数解包:

  $this->get(...$arrayOfFoo);类型化属性:

  publicint$intProperty;箭头函数,也称为短闭包:

  $ids=array_map(fn(Post$post):int=>$post->id,$posts);生成器:

  functionmake(array$input):Generator{foreach($inputas$item){yield$this->doSomethingWith($item);}}还有更多。我期望从这份列表中可以清楚地看到,PHP今日仍在不断开展,您可以肯定还会有更多的好东西面世。

  PHP的功能

  在曩昔的5.*时代里,php的功能是不可描述的。充其量也便是一般。但是,在7.0版别中,PHP中心的很大一部分被从头开始重写,导致功能提高了两三倍。此外,每个7.*版别都对功能产生了积极影响。

  不过,光靠言语是不够的。让咱们来看看基准测验。幸运的是,其他人现已花了大量时刻对PHP功能进行基准测验。我发现Kinsta3有一个很好的测评文章。

  与功能相关的最新特性称为预加载,它基本上答应您将编译后的PHP代码部分存储在内存中。你可以看看这儿的一些基准。

  当PHP8面世时,咱们还将具有一个JIT编译器,承诺进行风趣的功能改善,并答应PHP进入web开发以外的新领域。

  结构和生态体系

  接下来介绍社区运用PHP所做的作业。让咱们明确一下:恰恰相反,PHP不再仅仅是WordPress。

  一般来说,有两个主要的Web应用程序结构,以及一些较小的结构:symfony和Laravel。当然也有Lamina,Yii,Cake,Codeigniter等等–但是假如你想知道现代PHP开发是什么样子,前两个中的一个是不错的。

  这两个结构都有一个庞大的软件包和产品生态体系。从管理面板和CRM到独立的软件包,CI到剖析器,许多的服务,如WebSocket服务器,行列管理器,付出集成;老实说,有太多的东西要列出。

  这些结构是为实践开发而规划的;假如您需要纯粹的内容管理,WordPress、CraftCMS和Static等平台正在不断改善。

  衡量PHP生态体系当时状况的一种办法是检查PHP的主包存储库Packagist。它经历了指数级的增长。每天的下载量为±2500万次,可以公平地说PHP生态体系不再像曩昔那样处于劣势了。

  请看此图,其中列出了一段时刻内软件包和版别的数量。它也可以在Packagist2网站上找到。

  除了应用程序结构和CMS之外,咱们还看到异步结构在曩昔几年中的鼓起。这些是用PHP或其他言语编写的结构和服务器,答应用户运行真正异步的PHP代码。一些主要的玩家是Swoole,Amp和ReactPHP。

  自从咱们冒险进入异步世界以来,像websocket和具有大量IO的应用程序这样的东西实践上现已与PHP世界相关了。

  也有关于将libuv添加到中心的内部邮件列表的评论。关于那些没有意识到libuv的人来说:它与Node.js用来答应其所有异步性的库相同。谁知道呢?PHP8可能是将其添加到中心的版别!

  写在终究

  我期望我可以向您展现PHP在曩昔几年中有了巨大的开展,您完全可以用它编写干净和可维护的代码。

  假如您对现在流行的PHP代码感兴趣,可以检查我自己的一个项目的源代码,以及咱们亲身维护的许多开放源码包。

  因此,尽管这门言语肯定有它的缺陷和20年的前史遗产,但我可以自傲地说,我喜欢运用它。

  依据我的经历,我可以创建牢靠的、可维护的、高质量的软件。我为之作业的客户对终究成果很满足,我也是。尽管依然有可能用PHP做许多乱七八糟的事情,但我想说,假如运用得当,它仍是Web开发的一个很好的选择。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多