APP下载

PHP 8.1加入列举、只读属性等新语言功能

消息来源:baojiabao.com 作者: 发布时间:2024-11-22

报价宝综合消息PHP 8.1加入列举、只读属性等新语言功能

老牌脚本语言PHP推出最新的8.1版本,在众多新兴程式语言竞争之下,持续增加新功能来维持竞争力,在PHP 8.1中,加入列举(Enumerations)、只读属性(Readonly Properties),同时还有一级可呼叫语法(First-class Callable Syntax)等新功能,提升开发者的程式码编写体验。

PHP 8.1这个重大更新中,受开发者期待的新功能之一便是列举,列举让开发者自定义型别,限制有限数值的可能值,官方提到,该功能在定义特定领域模型时特别有用,因为能够让无效状态无法被表示。

列举功能普遍在各种程式语言出现,而具有的特性也有所差异,在PHP,列举是一个特殊的物件,列举本身是一个类别,并且在可能的情况,都属于该类别的单一实体物件,这代表Enum case是有效的物件,列举可在任何可能使用物件的地方使用,包括型别检查。而列举最常被使用的例子,便是内建的布林型别,这是一个列举型别,具有合法的值true和false。

在这个PHP版本,加入了一个只读(Readonly)属性修饰符,可以避免在初始化后,属性遭到修改,官方提到,数值物件通常是不可变的,属性在建构函式初始化后就不应该修改,但是PHP过去并无法强制执行此约束,最接近的选择,是将属性宣告成私有属性,并且以公共存取子(Getter)对外公开。

虽然这种替代做法,缩小了可能对单个类别宣告进行修改的范围,但实际并没有使属性成为只读,而且还需要使用存取子写法,更显得不方便,而现在PHP 8.1对只读属性提供第一级支援,将让开发者能够直接公开只读属性,而且不用担心类别不可变属性会被外部修改破坏。

新版PHP中一级可呼叫语法,使得开发者能够取得所有函式的参照,而Never回传型别,则是当函式或是方法宣告为Never型别时,就不会回传值,不过仍会抛出异常,并且透过呼叫die()、exit()、trigger_error() 等来结束脚本执行。

另外,PHP 8.1以Fibers来实现轻量级协作并行,Fibers可以创建像Generator般,能够被暂停或是恢复执行的程式码区块,但是却可从堆叠中任何位置进行,官方提到,Fibers并不会自动提供并行性,仍需要一个事件循环,只不过能够允许阻塞和非阻塞实作共享相同的API。

PHP基金会在成立几天后,随即发布了PHP 8.1,该基金会组成的目的,是要保管来自贡献者的资金,并确保PHP能够继续发展,目前RFC流程并不会改变,语言发展决策权也保留给php.internals社群。

2021-11-30 09:47:00

相关文章