|
Post by account_disabled on Dec 12, 2023 1:01:42 GMT -5
带来更多有趣的功能。它定于今年年底 2021 年 11 月 25 日发布。 在本文中,我们将详细分析 PHP 8.1 中的新增功能。从新功能到性能改进,从重大更改到弃用。我们将深入分析一切。 让自己舒服点! PHP 8.1 的新特性 让我们开始分析PHP 8.1的所有新特性。这是一个很好的清单。 纯交叉点类型 枚举 返回类型永远不是 纤维 新的只读属性 定义最终类常量 新功能钠XChaCha20 新的 类 AVIF 图像格式支持 新键 $_FILES:用于目录加载的 full_path 使用字符串键对数组进行数组解包 八进制数的显式表示法 支持 哈希算法 DNS-over-HTTPS (DoH) 使用 CURLStringFile 从字符串加载文件 新常量 MYSQLI_REFRESH_REPLICA 通过继承缓存提高性能 第一类可调用语法 信息 PHP 8.1 现已在 Kinsta 适用于所有环境。查看我们的PHP 8.1 功能更新以获取更多信息。 纯交叉点类型 PHP 8.1 引入了对交集类型的支持。 这与 PHP 8.0 中引入的联合类型类似,但它们的预期用途 电话号码清单 恰恰相反。 为了更好地理解,让我们回顾一下类型声明在 PHP 中的工作原理。 本质上,您可以向函数参数、返回值和类属性添加类型声明。此赋值称为类型提示,可确保调用时值的类型正确。如果不是,它会立即抛出TypeError。这可以帮助您更好地调试代码。 然而,声明单一类型有其局限性。联合类型允许您声明具有多种类型的值,并且输入必须至少满足其中一种声明的类型,从而帮助您克服此问题。 另一方面,RFC将交叉类型描述为: “交集类型”要求一个值满足多个类型约束,而不仅仅是一个。 …纯交集类型使用 T1&T2& 语法指定…并且可以在当前接受类型的所有地方使用… 请注意使用&(AND) 运算符来声明交集类型。相反,我们使用|(OR) 运算符来声明联合类型。 在交集类型中使用大多数标准类型将导致永远无法满足的类型(例如整数和字符串)。因此,交集类型只能包含类类型(即接口和类名)。 以下是使用交集类型的代码示例在上面的代码中,我们将countableIterator变量定义为两种类型的交集:Traversable和Countable。在这种情况下,两个声明的类型是接口。 交集类型还符合已用于类型检查和继承的标准 PHP 方差规则。 但还有两个附加规则会影响交集类型与子类型交互的方式。您可以在 RFC 中了解有关交集类型方差规则的更多信息。 在某些编程语言中,可以在同一声明中组合联合类型和交集类型。但 PHP 8.1 禁止这样做。因此,它的实现被称为“纯”交叉类型。然而,RFC 表示,这是“留作未来的目的”。 枚举 PHP 8.1 终于添加了对枚举(也称为枚举或枚举类型)的支持。它们是用户定义的数据类型,由一组可能的值组成。 编程语言中枚举最常见的例子是布尔类型,其中true和false作为可能的值。它非常常见,以至于许多现代编程语言都支持它。 根据RFC,PHP 中的枚举首先将仅限于“单位枚举”: 该 RFC 的范围仅限于“单元枚举”,即枚举本身就是一个值,而不是简单的原始常量的花哨语法,并且不包含其他关联信息。此功能为数据建模、自定义类型定义和 monad 样式行为提供了非常广泛的支持。枚举启用了“使无效状态不可表示”的建模技术,从而使代码更加健壮,并且减少了详尽测试的需要。 为了到达这个阶段,PHP 团队研究了许多已经支持枚举的语言。他们的调查发现,可以将枚举分为三类:奇特常量、奇特对象和全代数数据类型 (ADT)。
|
|