5分钟生成10篇英文软文article forge软件试用

营销型WordPress外贸多语言独立站建设+谷歌SEO优化+谷歌关键字广告投放,就找WP花园!深圳公司,技术实力雄厚,用效果说话!详情咨询info@wordpresshy.com

google广告开户

不久前,PHP 8.0 大张旗鼓地发布了。 它带来了许多新特性、性能增强和变化——其中最令人兴奋的是新的 JIT 编译器。

技术世界总是在向前发展,PHP 也是如此。

PHP 8.1 快要发布了,它包含了几个令人兴奋的功能。 它定于今年晚些时候于 2021 年 11 月 25 日发布。

在本文中,我们将详细介绍 PHP 8.1 中的新增功能。 从其新功能和性能改进到重大更改和弃用,我们将深入介绍它们。

稳坐!

PHP 8.1 中的新功能

让我们首先介绍 PHP 8.1 中的所有新功能。 这是一个相当多的清单。

笔记: 随着 PHP 8.1 发布日期的临近,此列表可能会增加或缩小。 我们将致力于使其保持最新状态。

PHP 8.1 快到了! 🎉 在这份深入的指南中查看有什么内容⬇️点击推文

WordPress divi主题

纯交集类型

PHP 8.1 添加了对交集类型的支持。 它类似于 PHP 8.0 中引入的联合类型,但它们的预期用途恰恰相反。

为了更好地理解它的用法,让我们回顾一下 PHP 中类型声明的工作原理。

本质上,您可以向函数参数、返回值和类属性添加类型声明。 这种分配称为类型提示,并确保值在调用时是正确的类型。 否则,它会立即抛出一个 TypeError。 反过来,这可以帮助您更好地调试代码。

但是,声明单一类型有其局限性。 联合类型通过允许您声明具有多种类型的值来帮助您克服这个问题,并且输入必须至少满足声明的类型之一。

另一方面,RFC 将交集类型描述为:

“交集类型”需要一个值来满足多个类型约束而不是单个约束。

…纯交集类型使用语法 T1&T2&… 指定,可用于当前接受类型的所有位置…

注意使用 & (AND) 运算符来声明交集类型。 相比之下,我们使用 | (OR) 运算符来声明联合类型。

在交集类型中使用大多数标准类型将导致永远无法满足的类型(例如整数和字符串)。 因此,交集类型只能包括类类型(即接口和类名)。

以下是如何使用交集类型的示例代码:

class A {
    private Traversable&Countable $countableIterator;
 
    public function setIterator(Traversable&Countable $countableIterator): void {
        $this->countableIterator = $countableIterator;
    }
 
    public function getIterator(): Traversable&Countable {
        return $this->countableIterator;
    }
}

在上面的代码中,我们定义了一个变量 可数迭代器 作为两种类型的交集: 可遍历可数. 在这种情况下,声明的两种类型是接口。

交集类型也符合已用于类型检查和继承的标准 PHP 变化规则。 但是还有两个关于交集类型如何与子类型交互的额外规则。 您可以在其 RFC 中阅读有关交集类型差异规则的更多信息。

fiverr建站WordPress程序员

在某些编程语言中,您可以在同一个声明中组合联合类型和交集类型。 但是 PHP 8.1 禁止它。 因此,它的实现被称为“纯”交集类型。 但是,RFC 确实提到它“留作未来范围”。

枚举

PHP 8.1 终于添加了对枚举(也称为枚举或枚举类型)的支持。 它们是用户定义的数据类型,由一组可能的值组成。

编程语言中最常见的枚举示例是 布尔值 类型,与 truefalse 作为两个可能的值。 它是如此普遍,以至于它被融入到许多现代编程语言中。

根据 RFC,PHP 中的枚举首先将被限制为“单元枚举”:

此 RFC 的范围仅限于“单元枚举”,即枚举本身就是一个值,而不是简单的原始常量的花哨语法,并且不包括附加的相关信息。 此功能极大地扩展了对数据建模、自定义类型定义和 monad 样式行为的支持。 枚举启用了“使无效状态不可表示”的建模技术,这会导致更健壮的代码,而无需进行详尽的测试。

为了达到这个阶段,PHP 团队研究了许多已经支持枚举的语言。 他们的调查发现,您可以将枚举分为三类:花式常量、花式对象和完整代数数据类型 (ADT)。 这是一个有趣的阅读!

独立站选品工具

PHP 实现了“Fancy Objects”枚举,并计划在未来将其扩展到完整的 ADT。 它在概念和语义上都模仿了 Swift、Rust 和 Kotlin 中的枚举类型,尽管它没有直接模仿它们中的任何一个。

RFC 使用一副牌中著名的西装类比来解释它是如何工作的:

enum Suit {
  case Hearts;
  case Diamonds;
  case Clubs;
  case Spades;
}

在这里, 适合 枚举定义了四个可能的值: , 钻石, 俱乐部, 和 黑桃. 您可以使用以下语法直接访问这些值: Suit::Hearts, Suit::Diamonds, Suit::Clubs, 和 Suit::Spades.

这种用法可能看起来很熟悉,因为枚举是建立在类和对象之上的。 它们的行为相似并且具有几乎完全相同的要求。 枚举与类、接口和特征共享相同的命名空间。

上面提到的枚举被称为 纯枚举.

高质量外链购买

你也可以定义 支持的枚举 如果你想给任何情况下一个标量等价的值。 但是,支持的枚举只能有一种类型,要么 int 或者 string (从来没有)。

enum Suit: string {
  case Hearts="H";
  case Diamonds="D";
  case Clubs="C";
  case Spades="S";
}

此外,支持枚举的所有不同情况都必须具有唯一值。 你永远不能混合纯枚举和支持枚举。

RFC 进一步深入探讨了枚举方法、静态方法、常量、常量表达式等等。 涵盖所有这些超出了本文的范围。 您可以参考文档以熟悉它的所有优点。

never 返回类型

PHP 8.1 添加了一个新的返回类型提示,称为 never. 在总是使用的函数中使用非常有帮助 throw 或者 exit.

根据 RFC,URL 重定向功能总是 exit (显式或隐式)是使用它的一个很好的例子:

JasperAI 10000字免费额度试用
function redirect(string $uri): never {
    header('Location: ' . $uri);
    exit();
}
 
function redirectToLoginPage(): never {
    redirect('/login');
}

一种 never– 声明的函数应满足三个条件:

  • 它不应该有 return 明确定义的语句。
  • 它不应该有 return 隐式定义的语句(例如 如果别的 陈述)。
  • 它必须以 exit 语句(显式或隐式)。

上面的 URL 重定向示例显示了显式和隐式用法 never 返回类型。

never 返回类型与 void 返回类型。 它们都确保函数或方法不返回值。 但是,它的不同之处在于执行更严格的规则。 例如,一个 void– 声明的函数仍然可以 return 没有明确的值,但你不能用 never– 声明的函数。

根据经验,使用 void 当您希望 PHP 在函数调用后继续执行时。 一起去 never 当你想要相反的时候。

此外, never 被定义为“底部”类型。 因此,任何声明的类方法 never 不能“永远”将其返回类型更改为其他类型。 但是,您可以扩展一个 void– 声明的方法 never– 声明的方法。

WordPress备份工具updrafplus

纤维

从历史上看,PHP 代码几乎一直是同步代码。 代码执行暂停,直到返回结果,即使是 I/O 操作。 您可以想象为什么这个过程可能会使代码执行速度变慢。

有多种第三方解决方案可以克服这一障碍,允许开发人员异步编写 PHP 代码,尤其是并发 I/O 操作。 一些流行的示例包括 amphp、ReactPHP 和 Guzzle。

但是,在 PHP 中没有处理此类实例的标准方法。 此外,在同一个调用堆栈中处理同步和异步代码会导致其他问题。

纤程是 PHP 通过虚拟线程(或绿色线程)处理并行性的方式。 它试图通过允许 PHP 函数中断而不影响整个调用堆栈来消除同步和异步代码之间的差异。

这是 RFC 承诺

  • 向 PHP 添加对 Fibers 的支持。
  • 引入一个新的 Fiber 类和对应的反射类 ReflectionFiber。
  • 添加异常类 FiberError 和 FiberExit 来表示错误。
  • Fibers 允许现有接口(PSR-7、Doctrine ORM 等)的透明非阻塞 I/O 实现。 那是因为占位符(promise)对象被消除了。 相反,函数可以声明 I/O 结果类型,而不是无法指定解析类型的占位符对象,因为 PHP 不支持泛型。

您可以使用 Fibers 开发全栈、可中断的 PHP 函数,然后您可以使用这些函数在 PHP 中实现协作多任务处理。 当 Fiber 暂停整个执行堆栈时,您可以放心,因为它不会损害您的其余代码。

图表说明了使用 Fibers 的 PHP 代码执行流程。

为了说明 Fibers 的用法,它的 RFC 使用了这个简单的例子:

$fiber = new Fiber(function (): void {
    $value = Fiber::suspend('fiber');
    echo "Value used to resume fiber: ", $value, "n";
});
 
$value = $fiber->start();
 
echo "Value from fiber suspending: ", $value, "n";
 
$fiber->resume('test');

你在上面的代码中创建了一个“纤维”并立即用字符串挂起它 fiber. 这 echo 声明作为光纤恢复的视觉提示。

您可以从调用中检索此字符串值 $fiber->start().

然后,您使用字符串“test”恢复光纤,该字符串从调用返回 Fiber::suspend(). 完整的代码执行会产生如下输出:

Value from fiber suspending: fiber
Value used to resume fiber: test

这是 PHP Fibers 工作的准系统教科书示例。 这是执行七个异步 GET 请求的另一个 Fibers 示例。

尽管如此,大多数 PHP 开发人员永远不会直接处理 Fibers。 RFC 甚至提出了同样的建议:

光纤是大多数用户不会直接使用的高级功能。 此功能主要针对库和框架作者,以提供事件循环和异步编程 API。 Fibers 允许在任何时候将异步代码执行无缝集成到同步代码中,而无需修改应用程序调用堆栈或添加样板代码。

Fiber API 不应直接在应用程序级代码中使用。 Fibers 提供了一个基本的、低级别的流控制 API 来创建更高级别的抽象,然后在应用程序代码中使用这些抽象。

考虑到它的性能优势,您可以期待 PHP 库和框架能够利用这一新功能。 看看他们如何在他们的生态系统中实施 Fibers 会很有趣。

新的 readonly 特性

PHP 8.1 添加了对 readonly 特性。 它们只能从它们被声明的作用域初始化一次。 初始化后,您永远无法修改它们的值。 这样做会抛出一个 错误 例外。

它的 RFC 写道:

一种 只读 属性只能初始化一次,并且只能从它被声明的作用域中初始化。 对该属性的任何其他分配或修改都将导致 Error 异常。

这是一个如何使用它的示例:

class Test {
    public readonly string $kinsta;
 
    public function __construct(string $kinsta) {
        // Legal initialization.
        $this->kinsta = $kinsta;
    }
}

一旦初始化,就再也回不去了。 有了这个…

营销型WordPress外贸多语言独立站建设+谷歌SEO优化+谷歌关键字广告投放,就找WP花园!深圳公司,技术实力雄厚,用效果说话!详情咨询info@wordpresshy.com

5分钟生成10篇英文软文article forge软件试用
tiktok