PHP 2019:比您想的要好



还记得曾经广受欢迎的帖子:“ PHP:不良设计的分形 ”吗? 当我第一次阅读它时,我在一个愚蠢的地方工作,其中包含许多过时的PHP项目。 她让我想知道我是否应该离开并做一些与编程完全不同的事情。

对我来说幸运的是,很快我就可以更改工作地点,更重要的是,PHP从5. *版本开始就可以“稍微”发展。 今天,通过这篇文章,我想吸引那些不再使用PHP进行编程或陷于遗留项目中的人们。

剧透:如今,PHP几乎像每种编程语言一样,都有很多缺陷。 许多基本功能的签名仍然不一致,配置设置令人困惑,仍然有许多开发人员在编写糟糕的代码,因为在他们当前的项目中,它们的工作原理不同,或者因为他们不知道其他原因。

今天,我想看看一个光明的一面:让我们集中讨论发生了什么变化以及如何编写干净且维护的PHP代码。 我想请你放弃偏见几分钟。

之后,您可以想到与以前完全一样的PHP。 尽管最有可能的是,您会对过去几年中PHP所做的一些改进感到惊讶。

TL 博士


  • PHP是积极开发的,每年都会发布一个新版本
  • PHP 5时代的性能提高了一倍甚至两倍
  • 有一个非常活跃的框架和库生态系统
  • 在过去的几年中,PHP已添加了许多新功能,并且语言在不断发展。
  • 近年来,诸如静态分析仪之类的工具已经发生了很大的变化,并且还在继续发展。

历史简史


简要了解PHP发行周期。 当前版本为PHP 7.3, 预计7.4版将于 2019年底发布。 PHP 8.0将是7.4之后的下一版本。 从PHP 5 *的后期开始,维护团队一直在尝试维护年度发布周期,并且在过去四年中一直做得很好。

通常,每个新版本都会得到两年的积极支持,并会获得另一年的“安全修复”。 目的是激励PHP开发人员保持版本最新:与从5.4切换到7.0相比,每年应用小的更新要容易得多。

可以在此处找到不同版本的PHP支持日期的更新日历。

最后,PHP 5.6是5. *分支的最新版本,而7.0是下一个。 如果您想了解PHP 6发生了什么,可以收听PHP Roundtable podcast

现在,让我们揭露一些关于现代PHP的常见误解。

PHP性能


在版本5的日子里。 但是,在7.0版中,PHP核心的重要部分从头开始进行了重写,从而使性能提高了两到三倍。

但是言语还不够。 让我们看一下测试。 幸运的是,其他人花费了大量时间对PHP性能进行基准测试。 我相信Kinsta有一个不错的更新列表。

从7.0版开始,性能只会提高。 如此之多,以至于PHP Web应用程序具有可比性,并且在某些情况下,其性能要优于其他语言的Web框架。 看看这个广泛的测试套件。

当然,PHP框架不会胜过C和Rust,但是它们比Rails或Django好得多,并且可以与ExpressJS相提并论。

框架与生态系统


说到框架:PHP不再仅限于WordPress。 作为专业的PHP开发人员,我可以告诉您:WordPress绝不是现代生态系统的代表。

通常,有两个主要的Web应用程序框架: SymfonyLaravel 。 还有一些较小的组件:Zend,Yii,Cake,CodeIgniter等。但是,如果您想了解现代PHP开发的模样,一个不错的选择是了解这两个最大的PHP之一。

这两个框架(Symfony和Laravel)都具有庞大的软件包和产品生态系统。 从管理面板和CRM到独立程序包(在原始的“独立程序包”中),从CI到事件探查器,以及众多服务,例如Web套接字服务器,队列管理器,支付集成; 坦白说,太多了​​,无法列出所有内容。

但是,这些框架旨在直接开发。 如果您只需要管理内容,WordPress和CraftCMS等平台只会变得越来越好。

衡量PHP生态系统当前状态的一种方法是查看packagist,这是PHP的主要软件包存储库。 它呈指数增长。 每天大约有2500万次下载,我们可以说PHP生态系统不再是以前的弱点。

看一下该图,它显示了随着时间的推移软件包和版本的数量。 也可以在包装专家网站上找到它。



除了应用程序框架和CMS,近年来,异步框架也有所增加。

这些用PHP或其他语言编写的框架和服务器允许使用真正的异步PHP。 示例包括SwooleAmpReactPHP

自从我们进入异步世界以来,诸如Web套接字和具有许多I / O操作的应用程序之类的东西已经在PHP世界中变得非常重要。

内部邮件列表-领先的开发人员讨论语言开发的地方-也谈到了将libuv添加到内核。 对于不了解libuv的用户,这是Node.js用于确保其所有异步性的同一库。

语言本身


尽管异步和等待尚不可用,但近年来对语言本身进行了许多改进。 这是PHP中新功能的不完整列表:

  • 箭头功能
  • 联合运算符为空
  • 特质
  • 类型属性
  • 开箱员
  • Jit编译器
  • 外部功能接口
  • 匿名班
  • 返回类型声明
  • 现代密码学
  • 发电机
  • 还有更多

在讨论语言功能时,我们还要谈谈当今语言如何发展的话题。 有一组志愿者维护人员将语言向前推进,而社区也可以提供RFC。

然后在内部邮件列表中讨论这些RFC,也可以在Internet上阅读它们。 在添加新的语言功能之前,必须进行投票。 仅允许大多数投票的RFC(至少占所有选民的1/3)被包含在核心中。

大约有100人参加投票,并且不需要对每个RFC进行投票。 当然,有机会投票的人包括维护者,因为他们必须维护代码库。 除了他们,还有一个小组的成员是从PHP社区中单独选择的。 该小组由PHP文档维护者,主要PHP项目的作者以及PHP社区的杰出开发人员组成。

尽管大多数开发都是在自愿的基础上进行的,但JetBrains最近聘用了PHP的核心开发人员之一Nikita Popov,全职从事该语言的开发。 另一个例子是Linux基金会,该基金会最近决定投资Zend框架。 这样的工作和收购保证了PHP的未来及其开发的稳定性。

工具包


除了核心本身,在过去的几年中,我们看到围绕它的工具也在增加。 想到了诸如Vimeo, PhanPHPStan创建的Psalm静态分析器。

这些工具可以静态地分析您的PHP代码并报告任何典型的错误,可能的错误等。从某种意义上讲,可以将它们提供的功能与TypeScript进行比较(译者注:静态分析器扩展了该语言搜索错误/缺陷的能力,从而为了改善语言,TS在JS之上有条件地做同样的事情) ,尽管目前PHP语言不可移植,因此不允许使用自定义语法。

尽管我们仍然必须依靠扩展坞和键入,但是PHP的创建者Rasmus Lerdorf 提到了向内核添加静态分析机制想法。 该任务具有很大的潜力,但在人工成本方面却是巨大的。

说到换位,值得注意的是,有人试图扩展PHP语法,而不是在JavaScript上实现的内核级别,而是用户库的级别。 一个叫做Pre的项目就是这样做的:它允许您使用包装在常规PHP代码中的新PHP语法。

尽管这种方法已经在JavaScript世界中证明了自己,但只有为IDE和静态分析提供适当的支持,它才能在PHP中获利。 这是一个非常有趣的想法,但是要成为主流,还有很长的路要走。

总结


尽管如此,请随意将PHP视为一种可怕的语言。 他绝对有他的缺点和20年的传承,但是我可以自信地说我喜欢和他一起工作。

借助它,我可以创建可靠,维护良好的高质量软件。 和我一样,为我工作的客户对最终结果感到满意。

尽管事实上在使用PHP时您仍然可以编写非常糟糕的代码,但我还是要说,如果使用正确,这是Web开发的绝佳选择。

你不同意吗? 写评论为什么!

Source: https://habr.com/ru/post/zh-CN456024/


All Articles