作者| 布伦特
译者|张兰月
本文并不是为了解决任何永恒的PHP 主题,而是为了让您了解PHP 的最新进展、显着特性和发展。
有一篇非常受欢迎的博客文章,名为“PHP:糟糕的设计”。当我第一次阅读这个博客时,我正在一个非常肮脏的地方工作,并且正在处理许多PHP 遗留项目。我被这个博客深深感动,并开始思考我是否应该放弃编程并找到一份完全不同的工作。文章地址:
https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
幸运的是,我很快就继续前进,PHP 自5.X 版本以来有了许多新的改进。今天,我想向那些不再使用PHP 编程或受困于遗留项目的人们致敬。
剧透:时至今日,PHP 仍然有很多缺点。例如,许多核心功能仍然存在不一致的方法签名,仍然存在令人困惑的配置设置,并且一些开发人员仍然认为,哎呀,我不知道。然而,在本文中,我想重点讨论PHP 所做的改进以及如何编写更干净且更易于维护的PHP 代码。也许您不会改变对PHP 的看法,但您会对它在过去几年中取得的进步感到惊讶。
要 点
PHP 每年都会发布新版本。自PHP 第五代以来,过去几年PHP 的性能不断提高,并添加了许多新功能。许多工具(例如静态分析器)不断发展并将继续开发。更新:很多人要求我查看实际代码,所以这是我用PHP 和Laravel 编写的一个副项目的源代码,以及我们在办公室维护的一个项目的源代码,其中列出了数百个OSS 包。
https://github.com/brendt/aggregate.stitcher.iohttps://spatie.be/open-source/packages
回顾历史
首先,让我们快速浏览一下PHP 的发布周期。 PHP 当前版本为7.3,PHP 7.4 预计将于2019 年底发布。 7.4 及更高版本将是PHP 8.0。
PHP核心团队从版本5开始,每年都会努力发布新版本。
根据一般经验,每个新版本都会得到两年的积极支持,然后是一年的“安全补丁”工作。目的是鼓励PHP 开发人员尽可能保持最新状态。例如,每年升级比直接从5.4跳到7.0要容易得多。
对于特定版本的PHP 的发布状态,您可以查看:
https://www.php.net/supported-versions.php
了解完PHP 的发展历史后,我们来谈谈一些关于PHP 的常见误解。
PHP 的性能
在5.X时代,PHP的平均性能是最好的。到了7.0时代,PHP核心的大部分都从头开始重写,性能可以比以前提高两到三倍。幸运的是,有人花了很多时间来测量PHP 性能,并且Kinsta 提供了一个很好的更新列表。
自7.0 版本以来,PHP 性能仅有所提高。 PHP Web 应用程序的性能与其他语言的Web 框架相当或更好。具体测试条件可以在这里找到:
https://github.com/the-benchmarker/web-frameworks
当然,PHP 框架无法胜过C 或Rust,但它们比Rails 和Django 更好,并且可以与ExpressJS 相媲美。
框架和生态系统
说到框架,PHP 不再只是WordPress。作为一名专业的PHP 开发人员,我认为WordPress 在任何层面上都不能代表当今的生态系统。
总体而言,有两个主要的Web 应用程序框架和一些较小的框架,例如Symfony 和Laravel。其他包括Zend、Yii、Cake 和Code Igniter。
如果你想了解现代PHP 开发到底是什么样的,你需要掌握Symfony 或Laravel。这两个框架拥有一个庞大的生态系统,包含各种软件包和产品。从管理面板和客户关系管理系统(CRM) 到单独的软件包、持续集成(CI) 到性能监控工具、Web 套接字服务器、队列管理器、支付集成等等。
然而,这些框架是为现实世界的开发而设计的。如果您想要纯粹的内容管理,WordPress 和CraftCMS 是最好的,而且它们正在不断变得更好。
评估PHP 生态系统当前状态的一种方法是查看Packagist,它是PHP 的主要包存储库。过去,它呈指数级增长,每天下载量约为2500 万次。这足以表明PHP 生态系统不再像以前那样处于劣势。
Packagist 网站上列出了过去的软件包和版本号。
除了应用程序框架和内容管理系统(CMS)之外,异步框架近年来也在兴起。
异步框架是指用PHP或其他语言编写的允许用户运行真正异步PHP的框架和服务器。异步框架的示例包括Swoole、Amp 和ReactPHP。
现在我们处于异步领域,像Web 套接字和IO 密集型应用程序之类的东西在PHP 世界中已经变得非常重要。
还有人讨论内部邮件列表,PHP 核心开发人员可以在其中讨论PHP 语言的进一步开发,例如将libuv 添加到核心。对于那些不熟悉libuv 的人来说,libuv 与Node.js 用于实现其所有异步功能的库完全相同。
语言本身
尽管async 和await 尚不可用,但PHP 在过去几年中已经做出了许多改进。以下是PHP 新功能的完整列表。
短闭包https://stitcher.io/blog/short-closures-in-php 空合并运算符https://stitcher.io/blog/shorthand-comparisons-in-php#null-coalescing-operatorTraitshttps://www.php.net/manual/en/lang。 php 属性类型https://stitcher.io/blog/new-in-php-74#typed-properties-rfc 扩散运算符https://wiki.php.net/rfc/argument_unpackingJIT 编译器https://wiki.php.net/rfc/jitFFIhttps://wiki。匿名类https://www.php.net/manual/en/language.oop5.anonymous.php 声明返回类型https://www.php.net/manual/en/functions.returning-values.php#functions.returning - value.type-declarationModern Cryptographyhttps://wiki .php.net/rfc/libsodiumGeneratorshttps://wiki.php.net/rfc/generatorsOtherhttps://www.php.net/ChangeLog-7.php 虽然今天的主题是PHP语言特性,但我觉得还是有必要讲一下PHP语言的开发过程。讲话。尽管社区可以提出RFC,但仍有一个活跃的核心志愿者团队推动PHP 的开发。在添加新的语言功能之前,您必须投票。只有获得2/3 多数票的RFC 才能添加到核心中。
大约有100 人可以投票,但他们不需要对每个RFC 进行投票。核心团队成员需要维护代码库,因此他们绝对可以投票。除了他们之外,还有一组来自PHP 社区的单独人员,包括PHP 文件的维护者、整个PHP 项目的贡献者以及PHP 社区中的杰出开发人员。
大多数核心开发人员都是由志愿者组成,但核心PHP 开发人员之一Nikita Popov 最近被JetBrains 聘用,全职从事该语言的开发工作。另一个例子是Linux基金会决定投资Zend框架。这些采用和收购确保了未来PHP 开发的稳定性。
工 具
除了核心本身之外,过去几年我们还见证了工具的增长。首先想到的是Vimeo 发明的Psalm,以及Phan 和PHPStan 等静态分析器。
这些工具静态分析您的PHP 代码并报告拼写错误和潜在错误等信息。在某些方面,它提供了与TypeScript 相当的功能,但PHP 尚未转译,因此不支持自定义语法。
这意味着必须依赖文档块,但PHP 的原始发明者Rasmus Lerdorf 提出了在核心中添加静态分析引擎的想法。这个想法潜力巨大,但挑战也巨大。
说到转编译,有很多人受到JavaScript 社区的启发,试图将PHP 语法扩展到用户空间。一个名为Pre 的项目就是这样做的。支持转换为常规PHP 代码的新PHP 语法。
这个想法已经在JavaScript 中实现,但只有提供合适的集成开发环境(IDE) 和静态分析支持,它才能在PHP 中发挥作用。这个想法很有趣,但在成为“主流”之前还需要完善。
结束语
尽管PHP 有许多缺点和遗留问题,但我可以自信地说我喜欢使用它。根据我的经验,它生产出可靠且易于维护的高质量软件。如果使用得当,PHP 非常适合Web 开发。
英文原文
https://stitcher.io/blog/php-in-2019
彩蛋一
新浪微博是国内领先的PHP语言之一,原新浪微博首席架构师惠新晨是PHP开发团队的骨干成员。 2016年,InfoQ编辑邀请新浪微博分享她的PHP 7升级实践和选择想法。虽然这篇文章比较老,但其背后的思想和实践细节仍然值得一读。有兴趣的同学可以通过在InfoQ公众号对话框回复关键词“PHP”来获取文章详细信息。
如果您在留言区没有收到回复,请在InfoQ公众号对话框中输入关键词进行回复。
彩蛋二
QCon全球软件开发大会广州站圆满成功我们为InfoQ 读者制作了会议的PPT。关键词:回复PPT。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。