01
最新特性一览
1.1 Property Hooks 属性钩子
Property Hooks 属性钩子 可能是现代 PHP 历史上最大的变化之一:属性钩子提供对计算属性的支持,这些属性可以被 IDE 和静态分析工具直接理解,而无需编写可能会失效的 docblock 注释。此外,它们允许可靠地预处理或后处理值,而无需检查类中是否存在匹配的 getter 或 setter。
示例:
class BookViewModel
{
public function __construct(
private array $authors,
) {}
public string $credits {
get {
return implode(', ', array_map(
fn (Author $author) => $author->name,
$this->authors,
));
}
}
public Author $mainAuthor {
set (Author $mainAuthor) {
$this->authors[] = $mainAuthor;
$this->mainAuthor = $mainAuthor;
}
get => $this->mainAuthor;
}
}
1.2 Without Parentheses 不使用括号的方法链
新版本 PHP 告别了方法链中多余的括号,开发者现在可以直接调用新实例化对象的方法时省略括号,从而简化方法链的书写。
示例代码:
以前:
$name = (new ReflectionClass($objectOrClass))->getShortName();
现在:
$name = new ReflectionClass($objectOrClass)->getShortName();
1.3 Asymmetric visibility 不对称可见性
现在可以独立地控制写入属性的作用域和读取属性的作用域,减少了需要编写繁琐的 getter 方法来公开属性值而不允许从类外部修改属性的需求。
示例代码:
class ReadOnlyProperty {
public string $data get;
private string $data set;
}
1.4 新的 array_*() 函数
新增函数 array_find ()、array_find_key ()、array_any () 和 array_all ()。
示例代码:
$numbers = [1, 2, 3, 4];
$found = array_find($numbers, fn($n) => $n > 2);
echo $found; // 输出: 3
1.5 新的 HTML5 支持
PHP 8.4 添加了\DOMDocument能够正确解析 HTML5 代码的类。旧 \DOMDocument类仍然可用,以实现向后兼容。
示例代码:
$doc = \Dom\HTMLDocument :: createFromString($contents);
其他核心特性更新请参考官网:
https://www.php.net/releases/8.4/zh.php
02
PHP:走向没落还是迎来转机?
2.1 昔日辉煌不再
PHP 语言诞生于 1995 年,它最初只是一个处理 HTTP 表单的脚本工具。在后续的版本中增加了 MySQL 数据库查询的支持,才逐渐成为一门独立的 Web 项目开发语言。随着互联网的迅猛发展,因 PHP 易学易用和强大的开发社区而备受青睐,成为了互联网应用开发的主要语言之一。与 Linux、MySQL、Apache 合并称为 LAMP 技术栈,LAMP 对互联网的影响巨大,逐渐成为构建动态网站和应用程序的主要技术架构,据 W3C 的统计,全球有接近 78% 的 Web 网站是基于 PHP 开发构建的。
值得一提的是,PHP 以其低成本、易用、灵活性和可扩展、繁荣的 Web 技术生态,一度在编程开发领域占据着重要的地位,与 Java 语言并驾齐驱。
而随着移动互联网、云计算、人工智能等新技术的兴起,互联网软件系统变得越来越复杂。大型网站系统对于高并发、可用性的要求也越来越高。Java 相比 PHP 拥有类型安全、更好的性能、多线程连接池技术、更严格的编程规范,并且在服务治理方面拥有更成熟的解决方案和生态。很多技术团队更倾向于使用 Java 构建 Web 系统,而非 PHP。
除此之外,伴随如 Node.js、Golang 等新编程语言的出现,它们在某些方面具有 PHP 不具备的优势,例如静态编译、更好的性能和异步编程。这些编程语言也在蓬勃发展,被越来越多的开发者使用。
今年的 TIOBE 指数显示,PHP 的流行度降至了历史最低,排在第 17 名,同时,在年度 Stack Overflow 开发者调查报告中,PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。
2.2 社区主导转型
一门编程语言的兴衰离不开它所处的环境,就像企业级编程语言的霸主 Java 在云原生时代也受到了来自 Go 语言的挑战,每年都有唱衰 Java 的言论发生,然而 Java 却仍就坚挺,但这不代表 Java 背后社区没有做出改变以面对新的时代要求。
Java 总体上是面向大规模、长时间的服务端应用而设计的,即时编译器、性能制导优化、垃圾收集子系统等 Java 最具代表性的技术特征,都是为了便于长时间运行的程序能享受到硬件规模发展的红利。但云原生时代的微服务潮流,却表示:高可用服务集群,无须追求单个服务要 7×24 小时不可间断地运行,它们随时可以中断和更新。
于是在这样的背景挑战下,Java 社区发起了 Project Leyden、Valhalla、Loom、Portola 等多个重要项目,开始了堪称航母掉头式的转型。
PHP 也是如此,本次发布的 8.4 版本,不仅仅是一系列新特性的合集,更代表着 PHP 向更现代化、高效和开发者友好的方向迈进的一大步。
国外开发者就对 PHP 的本次发版提出了向 Java 靠拢的点赞评论:
2.3 PHP 还值得学习吗?
相比现在主流的编程语言 Java、Python、C++,以及流行的 Node.js、Rust、Golang 等新型编程语言,PHP 有其无法被取代的独特优势,是一个非常便捷的开发工具集,可以帮助开发者节约很多时间。
概括而言,PHP 的优势有以下几点:
- 语言的简单性:没有太复杂的语法、不需要考虑整型溢出、符号之类问题、没有指针概念……
- 庞大的函数库:这些函数库涵盖了各种各样的功能和用途,让开发者能够更轻松地实现各种软件功能。
- 强大的字符串处理能力:PHP 除了是一个编程语言之外,还是一个模版语言。可以直接在模版中嵌入 PHP 表达式。
以 Laravel、Symfony 为代表的 PHP 框架现在也越来越成熟,逐渐拉近了与 Java Spring 框架的距离。而协程扩展项目 Swoole 在今年也推出了 v6.0 的计划,为 PHP 引入了多线程+协程的并发编程方案。
对于企业选型 PHP 来说,在数千万甚至上亿用户活跃的大型 Web 系统中,PHP 技术栈可能会面临各种挑战和难题,使用 Java 或 Golang 可以容易获得更好的性能、工程规范、高并发和高可用性、更成熟的服务治理方案。但绝大部分项目不会有如此大规模的用户量级和复杂度,使用 PHP 技术栈的开发团队依然是比较有性价比的选择。研发团队可以以较少的人力资源投入保持更快的迭代速度,在当下开源节流的大趋势下尤为重要。
对于 PHP 开发者们而言,第一,我们要学习 AI,使用 ChatGPT、GitHub Copilot 等工具提升自己的开发效率,了解 Transformers 等大模型的原理;第二,我们可以使用 Docker 镜像和 Docker Swarm 容器编排工具、Docker Compose 实现本机的容器启动管理;第三,我们也要掌握 Vue/React/ElementUI 等前端技术栈,要具备全栈开发的能力;最后,学习 C++/Golang/Java 等其他编程语言技术,不仅仅局限于 PHP 一种编程语言也是十分必要的。