• 展开微博窗口
  • QQ:365182575
  • 微信:cighsen
  • 展开分类目录
Nearnet

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社群。

码字很辛苦,转载请注明来自NAERENET《PHP 8.1加入枚举、只读属性等新语言功能》