PHP8.1于年11月发布,是PHP语言的最新次要版本。除了一些较小的改进和性能增强之外,它还添加了几个新的语言功能。有一些重大更改需要注意,但PHP8.0的大多数升级应该很简单。
新功能
今年的PHP更新添加了多项新功能以提高开发人员的工作效率。以下是您升级后可以使用的内容。
枚举
枚举类型最终成为PHP语言的一部分。它们让您指定一个值必须是一组预定义常量中的一个。
与常规常量相比,枚举在用作方法参数和返回值时为您提供了内置验证。它们也可能具有附加行为的支持值和方法。
#PHP8.0类PostStatus{constDraft=1;常量发布=2;}#PHP8.0-不能打字提示必须在`PostStatus`中定义`PostStatus`的值。classPost{publicfunction__construct(publicstringHeadline,publicintPostStatus){}}#PHP8.1enumPostStatus{caseDraft=1;案例发布=2;}#PHP8.1-现在不可能传递#无效值作为状态。classPost{publicfunction__construct(publicstringHeadline,publicPostStatusPostStatus){}}
只读属性
在新的readonly关键字标记的类属性的不可变的。只读属性只能写入一次。尝试在初始化后更改它们的值将引发错误。
这简化了简单的不可变值对象的创建。以前,如果您想公开属性值而不允许修改,则需要向类添加重复的方法。现在,您可以在public不冒意外突变风险的情况下制作这些属性。
#PHP8.0-这很快就会变得重复!classPost{publicfunction__construct(protectedstringHeadline){}公共函数getHeadline():string{returnthis-Headline;}}#PHP8.1classPost{publicfunction__construct(publicreadonlystringHeadline){}}
交叉路口类型
PHP的类型系统现在可以理解交叉点。这些使您可以指定一个值必须实现多个接口。
这在代码需要调用由两个不同接口定义的实例方法的情况下很有用。以前,您需要创建一个扩展两个所需接口的新接口。在您无法修改目标类以实现新接口的情况下,这并不总是可行的。
交叉点是通过将两种或多种类型与符号字符组合在一起来定义的。在PHP8.0中引入联合类型后,它们为类型系统增加了更多的灵活性。一个警告是你目前不能同时使用交集和联合类型——CountableStringable
CustomType在这个版本中是禁止的。
#PHP8.0接口CountableStringextendsCountable,Stringable{}公共函数countAndReport(CountableStringvalue):void{echo“value:”。计数(value);}#PHP8.1公共函数countAndReport(CountableStringablevalue):void{echo"value:".计数(value);}
纤维
纤程是促进并发执行的机制。它们使实现可从堆栈中的任何位置挂起的可恢复代码块变得更加容易。
该纤维API是相对水平较低。预计最终用户开发人员不会定期与它进行交互。相反,Fibers将被集成到提供异步API和事件循环实现的库中。它们是一个控制流系统,可以简化更高级别的抽象。
Fibers提供了一条异步函数调用的路径,看起来像常规的同步操作。您可以删除与承诺和回调相关的样板。Fiber在适当的点处理暂停和恢复代码,为操作的阻塞和非阻塞实现提供一种API。
#PHP8.0-基于承诺的HTTP客户端response=