您现在的位置是:自如初>PHP基础PHP基础
PHP 8.2 新特性之 DNF Types
温新
2023-02-21 14:38:08
【PHP基础】
706人已围观
简介PHP 8.2 新特性之 DNF Types。PHP 8.2 引入一个新的类型叫 DNF(Disjunctive Normal Form)。这个类型是 | 和 & 运算符的组合。它允许指定一种类型是两个或多个类型的联合,而每个类型是一个或多个其他类型的交集。
hi,我是温新,一名 PHPer
PHP 8.2 引入一个新的类型叫 DNF(Disjunctive Normal Form)。这个类型是 |
和 &
运算符的组合。它允许指定一种类型是两个或多个类型的联合,而每个类型是一个或多个其他类型的交集。
这样说挺不容易理解的,先通过 demo 演示,后续再来解释吧。
<?php
interface User
{
public function getName(): string;
}
interface Admin
{
public function getName(): string;
}
interface SuperAdmin
{
public function getName(): string;
}
// PHP 7 特性,匿名类
$user = new class implements Admin, SuperAdmin {
public function getName(): string
{
return 'PHP 8.2 DNF';
}
};
// 这是重点,看参数,接收的参数含义是:
// 该函数接收一个 同时实现了 Admin 和 SpuerAdmin 接口的 User 对象实例
function get_user_name((Admin & SuperAdmin) | User $user): string
{
return $user->getName();
}
echo get_user_name($user); // 输出:PHP 8.2 DNF
代码解释:
1、定义了三个接口,User、Admin、SuperAdmin;
2、定义一个匿名类,并实现 Admin、SuperAdmin 接口;
3、定义一个函数,该参数使用 dnf 类对参数进行限制,只允许接收同时实现了 Admin 和 SuperAdmin 接口的实例对象调用,否则报错;
4、调用函数。
下面将针对几种情况进行演示。
DNF 正确的使用方法
A|B|C
A|B|(C&D)
(A&B&C)|null
使用 & 时,必须使用
()
进行包裹。
A|B|C 用法
A B C 三个接口只要实现其中一个即可
// 该匿名名实现了 User 接口
$user = new class implements User {
public function getName(): string
{
return 'PHP 8.2 DNF';
}
};
// A|B|C 只要有一个实现了即可,否则会报错
function get_user_name(Admin | SuperAdmin | User $user): string
{
return $user->getName();
}
(A&B)|C
实例对象 C 必须实现 A、B两个接口。本案例中 $user
实例对象必须实现 Admin
、SuperAdmin
接口。
$user = new class implements Admin, SuperAdmin{
public function getName(): string
{
return 'PHP 8.2 DNF';
}
};
function get_user_name((Admin & SuperAdmin) | User $user): string
{
return $user->getName();
}
很赞哦!(10)
相关文章
- 使用 phpipze 编译扩展报错的解决方法
- PHP 7 特性之 匿名类
- PHP 8.2 新特性之 新增方法与弃用相关的操作
- PHP 8.2 新特性之 New Random Extension (新的随机数生成器扩展)
- PHP 8.2 新特性之 DNF Types
- PHP 8.2 新特性之 const 表达式中获取枚举的属性
- PHP 8.2 新特性之弃用动态属性
- PHP 8.2 新特性之 traits 中的常量
- PHP 8.2 新特性之 Hide Sensitive Information In The Back Traces
- PHP 8.2 新特性之 允许 null 和 false 作为独立类型