PHP 8.1 现已推出,它附带了新功能和性能改进——最令人兴奋的是新的 JIT 编译器。它最近于 2021 年 11 月 25 日发布。
我将详细演示 PHP 8.1 提供的 10 大特性,以便您可以开始在您的项目中使用它们,并改善您的 PHP 体验。初学者和有经验的开发人员可以从本文中受益。
PHP 8.1 提供的 10 大功能
- 枚举
- Fiber(纤维)
never
返回类型readonly
属性final
类常量- 新的
array_is_list()
函数 - 新的
fsync()
和fdatasync()
函数 - 对字符串键数组解包的支持
$_FILES
新的用于目录上传的full_path
键- 新的
IntlDatePatternGenerator
类
1. 枚举
PHP 8.1 添加了对枚举的支持,简写为 enum
。它是一种逐项类型,包含固定数量的可能值。请参阅以下代码片段以了解如何使用枚举。
2. Fiber(纤维)
PHP 8.1 添加了对 Fiber
的支持,这是一个低级组件,允许在 PHP 中执行并发代码。Fiber 是一个代码块,它包含自己的变量和状态堆栈。这些 Fiber 可以被视为应用程序线程,可以从主程序启动。一旦启动,主程序将无法挂起或终止 Fiber。它只能从 Fiber 代码块内部暂停或终止。在 Fiber 挂起后,控制权再次返回到主程序,它可以从挂起的点继续执行 Fiber。
Fiber 本身不允许同时执行多个 Fiber 或主线程和一个 Fiber。但是,对于 PHP 框架来说,高效管理执行堆栈并允许异步执行是一个巨大的优势。
请参阅以下代码片段以了解如何使用 Fiber。
3.never
返回类型
PHP 8.1 添加了名为never
的返回类型。该never
类型可用于指示函数将在执行一组指定的任务后终止程序执行。这可以通过抛出异常、调用exit()
或die()
函数来完成。
never
返回类型类似于void
返回类型。但是,void
返回类型在函数完成一组指定的任务后继续执行。
请参阅以下代码片段以了解如何使用 never 返回类型。
4.readonly
属性
PHP 8.1 添加了名为readonly
的类属性。已声明为只读的类属性只能初始化一次。里面设置的值不能改变。如果尝试强行更新该值,应用程序将抛出错误。请参阅以下代码片段以了解如何使用只读属性。
5. final
类常量
PHP 8.1 添加了对名为final
的类常量的支持。最终类常量不能被修改,即使是通过继承,这意味着它们不能被子类扩展或覆盖。
这个标志不能用于私有常量,因为它不能在类之外被访问。声明 final 和 private 常量将导致致命错误。
请参阅以下代码片段以了解如何使用最终标志。
6. 新的 array_is_list()
函数
PHP 8.1 添加了名为array_is_list()
的数组函数。它标识指定的数组是否具有从 0 开始的所有连续整数。如果数组是值的语义列表(一个数组,其键从 0 开始,都是整数,并且之间没有间隙),则此函数返回 true。对于空数组,它也返回 true。请参阅以下代码片段以了解如何使用 array_is_list() 函数。
键不是从 0 开始的数组,或者键不是整数,或者键是整数但不按顺序出现的数组将评估为 false。
7. 新的fsync()
和fdatasync()
函数
PHP 8.1 添加了对fsync()
和fdatasync()
函数的支持。两者都与现有fflush()
函数有相似之处,该函数当前用于将缓冲区刷新到操作系统中。然而,fsync()
和fdatasync()
刷新该缓冲区到物理存储。它们之间的唯一区别是该fsync()
函数在同步文件更改时包含元数据,而该fdatasync()
函数不包含元数据。
fsync()
函数将采用文件指针并尝试将更改提交到磁盘。成功时返回 true,失败时返回 false,如果资源不是文件,则会发出警告。fdatasync()
函数的工作方式相同,但速度稍快一些,因为 fsync() 将尝试完全同步文件的数据更改和有关文件的元数据(上次修改时间等),这在技术上是两次磁盘写入。
请参阅以下代码片段以了解如何使用 fsync() 和 fdatasync() 函数。
8. 对字符串键数组解包的支持
PHP 8.1 添加了对字符串键数组解包的支持。为了解压数组,PHP 使用展开(…)
运算符。PHP 7.4 中引入了这个运算符来合并两个或多个数组,但语法更简洁。但在 PHP 8.1 之前,展开运算符仅支持带数字键的数组。请参阅以下代码片段以了解如何将展开运算符用于字符串键控数组。
9. $_FILES
新的用于目录上传的 full_path
键
PHP 8.1 添加了对$_FILES
全局变量中full_path
新键的支持。在 PHP 8.1 之前,$_FILES
没有存储到服务器的相对路径或确切目录。因此,您无法使用 HTML 文件上传表单上传整个目录。新full_path
键解决了这个问题。它存储相对路径并在服务器上重建确切的目录结构,使目录上传成为可能。请参阅以下代码片段以了解如何将full_path
键与$_FILES
全局变量一起使用。
10. 新的IntlDatePatternGenerator
类
PHP 8.1 添加了对新IntlDatePatternGenerator
类的支持。在 PHP 8.1 之前,只能使用IntlDateFormatter
。虽然它支持昨天、今天和明天使用的八种预定义格式,但是这些格式和IntlDatePatternGenerator
不太一样。这个类允许指定日期、月份和时间的格式,并且顺序将由类自动处理。请参阅以下代码片段以了解如何使用 IntlDatePatternGenerator 类。
发表评论 取消回复