PHP史诗级更新!8.4版本能力挽狂澜吗?

45a3a3751fd208abd929971a0fbaefce.png

7be1e8f374c908da84b378c599c21a8c.gif

👉目录

1 最新特新一览

    1.1 Property Hooks 属性钩子

    1.2 Without Parentheses 不使用括号的方法链

    1.3 Asymmetric visibility 不对称可见性

    1.4 新的 array_*() 函数

    1.5 新的 HTML5 支持

2 PHP:走向没落还是迎来转机?

    2.1 昔日辉煌不再

    2.2 社区主导转型

    2.3 PHP还值得学习吗?

不同于早期 Java 一跳票就是一年的发布周期,PHP 最新发布的8.4版本甚至早于原定计划的11月21日,在11月19日这天正式上线,又以一天之隔在11月20日上线了8.4.1版本。

腾讯早期也有非常浓厚的 PHP 选型背景,我们过去也发布了多篇涉及到 PHP 重构的技术文章。从全世界最好的编程语言,到逐渐没落,PHP 的未来发展前景会如何?大厂技术选型中逐渐替换 PHP,是否意味着 PHP 不再有使用的必要?本次发布的新特性,又会带来哪些新的影响?

关注腾讯云开发者,一手技术干货提前解锁👇

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

5ce611c853a789d5a07d38b9221b8075.png

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 靠拢的点赞评论:

0e7bc03ebba28afeebfda13c0478fd9b.png

   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 一种编程语言也是十分必要的。

-End-

原创作者|腾讯云开发者

 cdab148414529bd6f437b9ce5e75c178.png

你对 PHP8.4 版本有什么看法?欢迎评论留言。我们将选取1则优质的评论,送出腾讯云定制文件袋套装1个(见下图)。12月2日中午12点开奖。

43853f40ee153e94243dac78d09797b9.png

📢📢欢迎加入腾讯云开发者社群,享前沿资讯、大咖干货,找兴趣搭子,交同城好友,更有鹅厂招聘机会、限量周边好礼等你来~

08ccd218ae9afbf43fb7b1e855c13200.jpeg

(长按图片立即扫码)

4c81b06e3ef1af3cfb42751f59df00c1.png

c72a81fae235abd572e4e1dd212f8324.png

30fce304687c572dd5516a821bb753dc.png

b4d97f94022ce2a12ae0cdf7958bc462.png

1aa80c58b2f0987e665c05e34c29112b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值