2019年了,PHP已不再是当年那个“设计糟糕”的语言

原创: Brent InfoQ

作者 | Brent
译者 | 张兰月
这篇文章不在于解决关于 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 5 代之后,其性能不断提升;

有框架、包和平台组成的活跃生态系统;

过去几年间,PHP 添加了许多新的特性,且现在仍在持续演进;

许多工具如静态分析器也越发成熟,未来也将继续发展。

更新:很多人希望我能够展示一下实际代码,这是我其中一个业余项目的源代码,它是用 PHP 和 Laravel 写的,另外还有一个是我们在办公室负责维护的上百个 OSS 包的列表。

https://github.com/brendt/aggregate.stitcher.io

https://spatie.be/open-source/packages

回顾历史
让我们先快速回顾一下 PHP 的版本发布周期。现在 PHP 的版本是 7.3,预计 2019 年末将发布 PHP 7.4,7.4 之后的版本将会是 PHP 8.0。

从 5.X 版本之后,PHP 核心团队一直在努力每年发布一个新版本,并且在过去的 4 年间,这一目标一直完成得很好。

大致来说,每个新版本都会用 2 年时间进行积极地支持,然后用一年进行“安全修补”工作。这样做的目的是促使 PHP 开发者尽可能保持最新状态,例如每年都升级比从 5.4 直接跳到 7.0 要简单得多。

PHP 具体的版本发布情况,可以查看:

https://www.php.net/supported-versions.php

搞清楚 PHP 的发展历程后,我们来谈谈大家对 PHP 的常见误解。

PHP 的性能
在 5.X 版本时代,PHP 的性能平均而言是最好的。而在 7.0 时代,大部分的 PHP 核心都从零开始重写了,其性能能够达到之前的 2-3 倍。口说无凭,幸运的是,有人花了大量时间来测量 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 无法从任何层面代表当今的生态系统。

总体来说,有 2 个主要的 web 应用框架以及一些相对而言较小的框架,如 Symfony 和 Laravel。除此之后,还有 Zend、Yii、Cake、 Code Igniter 等等。

如果你想了解现代 PHP 开发究竟是什么样子,那么就需要掌握 Symfony 和 Laravel 中的一个,这 2 个框架都有庞大的生态系统,包含各种包和产品。从管理面板和客户关系管理系统 (CRM) 到单独的包,从持续集成 (CI) 到性能监视工具,我们有无数的服务如 web 套接字服务器、队列管理器、支付集成等等。

但是,这些框架都是为实际开发而设计的。如果你需要纯粹的内容管理,WordPress 和 CraftCMS 是理想选择,而且它们还会不断优化。

衡量 PHP 生态系统目前状态的方法是看一看 Packagist,它是 PHP 主要的包仓库。在过去的时间里,它呈现出了指数式增长的态势,每天 2500 万左右的下载量,足以说明 PHP 生态系统已经不再是过去那种弱者了。

Packagist 网站上列出了过去的包和版本数量:

除了应用框架和内容管理系统 (CMS) 以外,我们还发现,在过去几年,异步框架也崛起了。

异步框架是指用 PHP 或其它语言编写的框架和服务器,它们能够让用户运行真正异步的 PHP。异步框架的例子包括:Swoole、Amp 和 ReactPHP。

由于我们已经进入异步领域,具有大量 IO 的 web 套接字和应用等东西在 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-operator

Traits

https://www.php.net/manual/en/language.oop5.traits.php

属性类型

https://stitcher.io/blog/new-in-php-74#typed-properties-rfc

扩散运算符

https://wiki.php.net/rfc/argument_unpacking

JIT 编译器

https://wiki.php.net/rfc/jit

FFI

https://wiki.php.net/rfc/ffi

匿名类

https://www.php.net/manual/en/language.oop5.anonymous.php

声明返回类型

https://www.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration

现代密码学

https://wiki.php.net/rfc/libsodium

Generators

https://wiki.php.net/rfc/generators

其他

https://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 代码,并且报告打字错误、可能的 bug 等等。在某些方面,它们提供的功能足以和 TypeScript 相媲美,但目前 PHP 还没有被转编译 (transpile),因此它并不支持定制句法。

虽然这意味着我们必须依赖于文档块,但 PHP 的最初发明者 Rasmus Lerdorf 提出了将静态分析引擎添加到核心之中的想法。这个想法潜力巨大,但任务量着实不小。

提到转编译,由于受到 JavaScript 社区的启发,有许多人试图将 PHP 句法延伸到用户空间中。一个名叫 Pre 的项目就做了这件事情:它支持新的已经转编译为普通 PHP 代码的 PHP 句法。

虽然这一想法已经在 JavaScript 中得以实现,但只有在提供了适当的集成开发环境 (IDE) 和静态分析支持后,它才能在 PHP 工作。这一想法非常有趣,但还必须不断完善,才能变成“主流”。

结束语
尽管 PHP 还有很多缺点和遗留问题,但我可以充满信心地说,我喜欢使用它。就我的经验来看,它可以创建可靠、可维护和高质量的软件。如果使用得当,PHP 对于 web 开发来说是个非常棒的选择。

英文原文
https://stitcher.io/blog/php-in-2019

原创: Brent InfoQ

作者 | Brent
译者 | 张兰月

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值