欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

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

时间:2022-11-03 07:33:17 | 浏览:15016

PHP 是一种开源的通用计算机脚本语言,适用于网络开发并可嵌入 HTML 中使用。它的语法借鉴吸收 C 语言、Java 和 Perl 等流行计算机语言的特点,易于一般程序员学习。但是由于太难用,也是被很多人吐槽的一种语言。下面,来看看这位曾

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 5.6 是 5.*时代的最新版本,它的下一个版本就是 7.0。如果您想知道 PHP 6 发生了什么,可以收听 PHP 圆桌播客 :

https://www.phproundtable.com/episode/what-happened-to-php-6

了解这些之后,我们可以进一步探讨关于 PHP 的常见误解了。

PHP 性能

5.* 时代的 PHP 性能充其量也不过是平均水平,但是在 7.0 中,PHP 核心的大部分内容都被完全重写,性能也因此提高了两到三倍。

光说不练假把式,我们用基准测试结果说话。有人对 PHP 的性能进行过基准测试,这些测试被很好地记录在了 Kinsta 上:

https://kinsta.com/blog/php-benchmarks/

自从 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 生态系统已经不再是过去的小输家了。

下面的图表,列出了包和版本的数量随时间的变化。

除了应用程序框架和 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 还会有一些乱七八糟的事情,但如果使用得当,我认为它还是一个不错的网络开发选择。

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

相关资讯

PHP学习Thinkphp框架(1)——关于Thinkphp结构目录和数据库操作

Thinkphp:=> 简介:是由上海顶想公司开发的一款,PHP写成的,开源的MVC框架;官网:http://www.thinkphp.cn下载:https://github.com/top-think/framework 环境要求:

国产PHP框架ThinkPHP与SpeedPHP的浅析对比

本文主要简析两个国产的PHP框架ThinkPHP与SpeedPHP。通过学习发现,它俩在很多方面有着相似但又不同的地方:1.单一入口,二者都是单一入口文件。每个app都需要一个入口文件,且只能有一个入口文件。ThinkPHP生而就有多app

《PHP》什么是PHP框架,为什么要用PHP框架

PHP框架是什么?PHP框架提供了一个用以构建web应用的基本框架,从而简化了用PHP编写web应用程序的流程。这样不但节省开发时间,有助于建立更稳定的应用,而且减少了重复编码的开发。框架还可以帮助初学者建立更稳定的应用服务,这可以让你花更

「PHP发展史」PHP5.2到PHP5.6中新增的功能详解

截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护的 PHP5.2, 其余的一半用户在使用 PHP5.3。因为 PHP 那“集百家之长”的蛋疼语法,加上社区氛围不好,很多人对新版本

PHP开发者的福音,解读PHP异步通信框架Swoole的机制

在中国互联网行业膨胀的12-16年,PHP语言凭借自身易上手,开发周期短的优势,深受各中小企业的喜爱。小编也很荣幸在2009年底进入这一行业,为自己谋生分得一杯羹。但是PHP又先天有它的局限性,导致客户很多需求无法得到满足。大家都知道,P

ZWebPHP基于API的简易PHP开发框架

ZWebPHP 框架设计目的:标准化、体验统一、简单可靠、易于扩展后端PHP框架基于PHP、smarty 构建。基于composer自动加载。完全基于API接口设计,API文档自动生成。权限包含菜单访问权限和API接口访问权限。工具类、数据

PHP组件及框架推荐系列:PHP世界中最好的日志组件——Monolog

这也许,不,就是PHP