PHP 8.1 特征成员中的后期静态绑定是否已弃用?

问题描述 投票:0回答:1

PHP8.1 有一个existing deprecation notice表明:

调用静态方法,或直接在特征上访问静态属性已被弃用。静态方法和属性只能在使用特征的类上访问。

相关的 RFC 中给出的示例显示了从特征/类外部直接从特征访问静态成员。然而,这是否适用于特征内部的自我/静态上下文是模棱两可的。我感兴趣的是这种弃用是否适用于在内部从特征访问静态类成员,例如:

trait SupportsArrayBackedValues
{
    abstract public static function cases();

    public function backedValueArray(): array
    {
        return array_map(fn($case) => $case->value, static::cases());
    }
}

PhpStorm 2021.3.1 在使用

static::cases()
时显示弃用警告:

直接调用静态特征成员已被弃用。它应该只在使用特征的类上访问。

但我不确定这是否合法,或者他们如何解析检查的错误。检查提供转换为

self::cases()
,它继续显示弃用警告。但是,我找不到在 IntelliJ 的 YouTrack 中跟踪此问题的任何问题,这表明它是一个错误。

如果这确实是一个有效的检查通知,是否有适当的方法来实现我正在寻找的功能,或者更一般地说,从特征内部访问类的静态成员? (即在我的场景中,将支持的枚举转换为字符串/整数值数组,而不是枚举实例)。

php phpstorm
1个回答
0
投票

跟随文档,这是php8.1版本以来的语言特性:

注:

从 PHP 8.1.0 开始,调用静态方法或直接访问特征上的静态属性已被弃用。静态方法和属性只能在使用特征的类上访问。

© www.soinside.com 2019 - 2024. All rights reserved.