服务器端脚本语言PHP 8.1 发布,枚举、Fibers和性能改进

2022-02-0610:23:36后端程序开发Comments1,570 views字数 2280阅读模式

PHP 8.1 正式发布,带来了诸多创新,例如枚举、Fibers和性能改进。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

PHP 是一种服务器端脚本语言,用于开发 Web 应用程序。根据 W3Techs 的数据,78.2% 的网站使用 PHP 并使用已知的服务器端编程语言。换句话说,您在 Internet 上访问的每 10 个网站中几乎有 8 个以某种方式使用 PHP。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

在宣布成立PHP 基金会几天后,该语言通过发布 最新的 PHP 8.1 更新而不断发展。这个新版本于 2021 年 11 月 25 日发布,包含许多新功能,包括枚举、只读属性、First-class 可调用语法、Fibers、交集类型、性能改进等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

让我们快速浏览一下您应该迁移到 PHP 8.1 的一些新功能、性能调整和其他原因。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

PHP 8.1 亮点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

对于每一个新的 PHP 版本,我们通常可以期待性能的小幅提升,这次似乎也不例外。这个最新版本还提供了帮助开发人员编写更简洁代码的功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

枚举(Enumerations)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

PHP 8.1 引入了一种名为 Enums的新数据类型。它基本上是在一个实体中声明的一组预定义值。枚举是应用程序建模中的重要工具,因为它允许您定义自己的允许状态的微观世界。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

现在您可能已经在代码中以一种或另一种方式使用了枚举,但现在 PHP 8.1 将原生支持枚举。这对每个人来说都是个好消息。在最基本的形式中,枚举看起来像这样:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

enum Animal {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

case Dogs;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

case Cats;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

case Birds;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

case Reptiles;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

与其他语言类似,这是一种允许预定义值的枚举类型。上面的示例创建一个新的名为枚举类型 Animal ,它采用下列四个值: Animal::Dogs , Animal::Cats , Animal::Birds 和 Animal::Reptiles 。可以将变量分配给这些值。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

Enums 的优点是它们代表了一组常量值,但最重要的是,这些值可以被键入。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

Fibers文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

到目前为止,PHP 仅用于编写同步代码。PHP 8.1 附带了一项激动人心的新功能,用于将异步代码构建到语言 Fibers 中文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

Fiber的引入旨在消除异步和同步函数之间的区别。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

您可以使用 Fibers 开发全栈、可中断的 PHP 函数,然后您可以使用这些函数在 PHP 中实现协作多任务处理。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

Fiber 会暂停整个调用堆栈,因此函数的直接调用者无需更改其调用函数的方式。执行可以在调用堆栈中的任何地方使用 Fiber::suspend .文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fiber = new Fiber(function : void {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$value = Fiber::suspend('fiber');文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

echo "Value used to resume fiber: ", $value, "\n";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

});文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$value = $fiber->start;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

echo "Value from fiber suspending: ", $value, "\n";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fiber->resume('test');文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

输出文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

Value from fiber suspending: fiber文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

Value used to resume fiber: test文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

First-class 可调用语法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

First-Class callables是一种引用闭包和函数的新方法。虽然以前您已经可以通过将它们的名称用作字符串或通过创建可调用数组来引用它们,但现在有这种正确的语法可以从任何给定函数创建可调用对象,以便您以后可以调用它。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fn = Closure::fromCallable('strlen');文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fn = strlen(...);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fn = Closure::fromCallable([$this, 'method']);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fn = $this->method(...)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fn = Closure::fromCallable([Foo::class, 'method']);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

$fn = Foo::method(...);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

在这个例子中,每对表达式都是等价的。该 strlen(...) 语法创建一个 Closure 引用的 strlen 功能,等等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

PHP 8.1 中的其他改进文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

数组和打包现在支持字符串键,并且可以创建类常量, final 这样它们就不会被子类覆盖。此外,还有一个新 array_is_list 函数可以确定数组是否只有从 0 开始并以 1 递增的数字键,但它是否是实际列表。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

PHP 8.1 引入了一种写八进制整数的新方法,我们现在也有 Pure Intersection 类型。这与联合类型相反,它允许任何声明的类型。如果您经常在代码中使用接口,Pure Intersection 类型很有用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

最后是 never 类型。它是一种返回类型,表示函数永远不会返回。这意味着它将退出或始终抛出异常。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

function redirect(string $url): never {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

header('Location: ' . $url);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

exit;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

never 返回类型的目标 是指示和强制执行一个函数,以防止执行其余被调用的代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

最后但并非最不重要的一点是,PHP 8.1 图像处理和 GD 扩展增加了对 AVIF 图像的支持。与 JPEG、PNG 和 WebP 相比,AVIF 图像可显着减小文件大小,目前Google Chrome和Mozilla Firefox 支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

PHP 8.1 性能改进文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

每个 PHP 版本都在性能方面不断改进,PHP 8.1 为现实生活中的应用程序带来了巨大的性能改进。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

事实上,PHP 8.1 上的 Symfony 演示应用程序比 PHP 7.4 快约 23%,而 Laravel 在 PHP 8.1 上的运行速度比 PHP 7.4 快约 21.5%。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

服务器端脚本语言PHP 8.1 发布,枚举、Fibers和性能改进文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

这是 PHP 8.1 中实现的两项新技术以及许多小的性能修复和调整的结果。所以,当然,很高兴看到 PHP 的性能如何随着每个新的更新而不断提高。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

来自:Linux迷文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23105.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/23105.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定