投票通过!PHP 8 确认引入 Union Types 2.0联合类型

2022-12-23 0 277

有关与否要在PHP 8中导入Union Types的投票表决已于日前完结,投票表决结论表明有61 名PHP合作开发项目组投了反对票,5名投了反对票。

投票通过!PHP 8 确认引入 Union Types 2.0联合类型

投票通过!PHP 8 确认引入 Union Types 2.0联合类型

▲(还察觉到鸟哥在投票表决Shajapur了反对票~)

因而依照投票表决结论,非官方已确认Sonbhadra在PHP 8中导入 Union Types 2.0。

投票通过!PHP 8 确认引入 Union Types 2.0联合类型

有关 Union Types的具体内容探讨可在GitHub查阅,上面他们来单纯介绍呵呵Union Types(联手类别)。

依照非官方的如是说,Union Types(联手类别)全力支持转交数个相同类别的值,而更为重要是单个类别。PHP现阶段早已全力支持三种特定的联手类别:

Type or null,采用特定的?Type句法

array or Traversable,使特定的iterable类别

但是PHP现阶段尚不全力支持任一的联手类别。如要采用,需透过 phpdoc注解的协助,实例如下表所示:

class Number { /** * @var int|float $number */ private $number; /** * @param int|float $number */ public function setNumber($number) { $this->number = $number; } /** * @return int|float */ public function getNumber() { return $this->number; } }

依照数据统计的结论,在开源生态以及PHP自身的标准库中采用联手类别非常普遍。非官方表示,如果PHP能全力支持联手类别,Sonbhadra允许他们将更多类别信息从phpdoc迁移至函数签名,这具有以下常见的优点:

类型实际上是强制执行的,因而可以及早发现错误。

因为它们是强制性的,所以类别信息不太可能变得过时或遗漏边缘情况。

在继承过程中会检查类别,以执行里氏替换原则(Liskov Substitution Principle)

可透过反射获得类别信息。

句法比phpdoc简洁。

泛型之后,联手类别可以说是现阶段类别声明系统中最大的“缺口”。

提案

联手类别采用 T1|T2|… 句法,可在所有接受的类别中采用:

class Number { private int|float $number; public function setNumber(int|float $number): void { $this->number = $number; } public function getNumber(): int|float { return $this->number; } }

全力支持的类别

联手类别全力支持PHP当前全力支持的所有类别:空类别、可空联手类别、false pseudo-type、重复和冗余类别。

类别句法

除特定void类别外,PHP的类别句法现在可以透过以下句法来描述:

type: simple_type | “?” simple_type | union_type ; union_type: simple_type “|” simple_type | union_type “|” simple_type ; simple_type: “false” # only legal in unions | “null” # only legal in unions | “bool” | “int” | “float” | “string” | “array” | “object” | “iterable” | “callable” # not legal in property types | “self” | “parent” | namespaced_name ;

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务