关于一般的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开发的一个很好的选择。 |
|