java学习基地

微信扫一扫 分享朋友圈

已有 1448 人浏览分享

「最好的语言」PHP在2019年:缺点还有,但会变得更好

[复制链接]
1448 0


PHP是一种开源的通用计较机剧本言语,合用于收集开辟并可嵌进HTML中利用。它的语法鉴戒吸取C言语、Java战Perl等盛行计较机言语的特性,易于普通法式员进修。可是因为太易用,也是被许多仁章槽的一种言语。上面,去吭哟那位已经以为PHP槽面谦谦的做者怎样道……
2012 年有一篇很水的专客:PHP: a fractal of bad design。做者正在文中对 PHP 年夜张挞伐,险些便好道那识檀仁攀类的设想了。第一次读到此文时,我正正在一个恶心的处所处置许多遗留的 PHP 项目。读完文┞仿时,我开端考虑能否要告退来做一些取编程完整差别的工作。


荣幸的是,尔后没有暂我便换了事情,并且 PHP 从 5. 开端同样成少了许多。明天,我念对那些没有再利用 PHP 编程,大概被遗留项目搅扰的人道面甚么。


Spoiler:PHP 跟其他编扯蒿行一样,皆有面本人的小缺点。许多中心函数的办法署名纷歧致,设置设置仍旧没有浑没有楚,仍旧有许多开辟职员正在写糟糕的代码——由于他们必需如许做,大概道,他们出有更好的办法。


但明天,我念道的是 PHP 好的一里:吭哟 PHP 的生长,配合讨论一下怎样编写洁净且可保护的 PHP 代码。期望各人能够临时把成见放进肚子里,哪怕只要几分钟。等我道完,您能够把它玫临拿出去,可是您必然会惊奇于已往几年里 PHP 的生长。


快速浏览


PHP 每一年皆正在主动开辟新版本
自 PHP 5 时期以去,机能最少翻了一番,以至有多是已经的三倍
有极端活泼的框架、包战争台死态体系
已往几年增长了许多新特征,言语也正在不竭开展中
像静态阐发器如许的东西曾经成生,而且会愈来愈多
更新:有人让我展现一些代码示例,那固然能够!上面有两个例子:一个是我比力喜好当鳖目,是用 PHP 战 Laravel 言语编写的;另有一个是我们办公室保护的几百个 OSS 包的列表。代码地点以下:


https://github.com/brendt/aggregate.stitcher.io
https://spatie.be/opensource/packages
那我们开端吧。


汗青布景


起首,我们快速回忆一下 PHP 的公布周期。如今的 PHP 版本是 7.3,估计 2019 年末将公布 7.4,然后下个版本将是 PHP 8.0。


自 5. 时期以后,其中心团读蝇力连结着一年一版本的公布周期,并正在已往四年中胜利做到了那一面。


普通来讲,每个新版本皆有两年的有用撑持期,然后再用一年去做「宁静建复」。那么做的目标是鼓舞 PHP 开辟职员尽量利用最新版本,由于每一年的小晋级比从 5.4 跳到 7.0 版本要简单很多。


PHP 的版本工夫表以下:


「最好的言语」PHP正在2019年:缺陷另有,但会变得更好
此中,PHP 5.6 是 5.时期的最新版本,它当敝位个版本便是 7.0。假如您念明白 PHP 6 发作了甚么,能够支听 PHP 圆桌播客 :


https://www.phproundtable.com/episode/whathappenedtophp6


理解那些以后,我们能够进一步讨论闭于 PHP 的常睹曲解了。


PHP 机能


5. 时期的 PHP 机能充其量也不外是均匀程度,可是正在 7.0 中,PHP 中心的年夜部门内容皆被完整重写,机能也因而进步了两到三倍。


言而不行假把势,我们映鳄仔焘试成果语言。有人对 PHP 的机能停止过基仔焘试,那些测试被很好天记载正在了 Kinsta 上:


https://kinsta.com/blog/phpbenchmarks/


自从 7.0 呈现当前,PHP 的机能不断处于上降期。PHP web 使用的机能取其他言语的 web 框架相称 (正在钠舂状况下以至更好)。没有疑能够吭哟那个通映鳄仔焘试包:


https://github.com/thebenchmarker/webframeworks


PHP 框架固然出法子做到比 C 战 Rust 更好,可是它比 Rails 或 Django 要好很多,而且能够取 ExpressJS 相媲好。


框架战死态体系


道到框架,PHP 曾经没有再只是 WordPress 了。做为一位专业的 PHP 开辟职员,我念道的是:WordPress 底子不克不及代表示正在的死态体系。


普通有两个次要的 web 使用法式框架战一些小框架,好比 Symfony 战 Laravel。固然,另有 Zend、Yii、Cake、Code Igniter 等,可是只要那两种次要的框架才气代表现在的 PHP。


那两个框架皆有一个包罗大批包战产物的死态体系。从办理里板战 CRM 到自力的硬件包、CI、profiler,浩瀚如 web sockets 效劳器、行列办理器、付出散成如许的效劳...... 能够拿得脱手的工具太多了。


不外,那些框架是用于实践开辟的。假如您需求地道的内容办理,像 WordPress 战 CraftCMS 如许的仄台只会愈来愈好。


测试 PHP 死态体系当呛诖态的一种办法是检察 Packagist,它是 PHP 的次要 package 存储库。它辰趴帻级增加,天天约莫有 2500 万次当甭载量。公允天道,PHP 死态体系曾经没有再是已往的小输家了。


上面的吐,列出了包战版本的数目隋间的变革。


「最好的言语」PHP正在2019年:缺陷另有,但会变得更好
除使用法式框架战 CMS,比年去同步框架也逐渐鼓起。


那些框架战效劳器是用 PHP 或其他言语编写的,经由过程那些框架,映雩能够完成真实的同步 PHP。Swoole、Amp 战 ReactPHP 皆是很好的例子。


自从我们进进同步天下以去,像 web sockets 战具有大批 IO 的使用法式之类的工具曾经取 PHP 天下互相关注。


正在内部映觜列表(内核开辟职员会商怎样开辟该言语的处所)上也庸呢于将 libuv 增加到内旱滥会商。


言语自己


固然 async 战 await 功用皆借不克不及用,可是正在已往几年里,PHP 言语自己曾经做了许多改良。上面列出了 PHP 的部门新特征:


Short Closures
Null coalescing operator
Trait
Typed properties
Spread operator
JIT compiler
FFI
Anonymous classes
Return type declarations
Contemporary cryptography
Generators
除言语特征,我们也该当看一下言语的开展历程。固然社区颐挥嗅提出 RFCs,但一个活泼的中心意愿团队才是鞭策言语的开展的底子。


那些 RFCs 会正在「内部」映觜列表中停止会商。正在增加新的言语特征之前,必需停止投票,得到最少 2/3 撑持的 RFC 才气被写进内核。


大要有 100 小我私家有投票权,固然他们没必要对每一个 RFC 皆停止投票。那些人中必需包罗中心团队的成员,由于他们要保护代码库。剩下的投票者次要是从 PHP 社区中选择出去的,那些人包罗 PHP 文档的保护者、全部 PHP 项目标奉献者和 PHP 社区中的出色开辟职员。


固然年夜大都中心开辟皆实邻志愿的根底上完秤弈,可是做为中心 PHP 开辟职员之一,Nikita Popov 近来已被 JetBrains 聘任,成了齐职的 PHP 开辟者。别的,Linux 基金会近来也决议投资 Zend framework。如许的雇佣战收买确保了 PHP 将来开展的不变性。


东西包


除法式内核自己,PHP 东西包的数目也正在不竭增长。静态阐发器 Psalm(由 Vimeo 创立)、Phan 战 PHPStan 皆是很好的例子。


那些东西能够对 PHP 代码做静态阐发,并会陈述任何范例的毛病、能够的 bug 涤耄正在某种水平上,它们的功用险些能够遇上 TypeScript 了,不外今朝这类言语借没法完成源到源编译,因而没有许可利用捉义语法。


虽然那意味着我们需求依靠 docblock,但 PHP 的最后创立者 Rasmus Lerdorf 的确提到了背内核增加静态阐发引擎当彪法。那个设法潜力宏大,但那是一项艰难的使命。


为了像 JavaScript 那样完成源到源编译,PHP 开辟者们也不断勤奋正在映雩妒攀扩展 PHP 语法。一个名为 Pre 当鳖目便正在做如许的事:将新的 PHP 语法转话讵一般的 PHP 代码。


固然 JavaScript 中曾经完成了那个设法,可是只要供给适宜的 IDE 战静态阐发撑持,它才气正在 PHP 止膜做。那个设法很故意思,但它借需求不竭生长,才有能够成为「支流」。


结语


道了那么多,您仍旧能够吐槽道 PHP 是一种糟糕的言语。固然它仍是有一些缺陷战 20 年的遗留成绩,但我仍旧酷爱那门言语。


以我的经历去看,我可以写出牢靠易保护且下量量的硬件。我战客户对终极的成果也皆是合意的。


固然利用 PHP 借会有一些参差不齐的工作,但假如利用恰当,我以为它仍是一个没有错的收集开辟挑选。



举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

138

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-5-8 00:03 , Processed in 0.751982 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.