【问题标题】:Is late static binding in PHP 8.1 trait members deprecated?PHP 8.1 trait 成员中的后期静态绑定是否已弃用?
【发布时间】:2022-10-17 21:34:32
【问题描述】:

PHP8.1 有一个existing deprecation notice,它表示:

不推荐调用静态方法或直接在 trait 上访问静态属性。静态方法和属性只能在使用 trait 的类上访问。

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

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() 时会显示弃用警告:

不推荐直接调用静态特征成员。只能在使用 trait 的类上访问它。

但我不确定这是否合法,或者他们如何解析检查的错误。检查提议转换为self::cases(),它继续显示弃用警告。但是,我在 IntelliJ 的 YouTrack 中找不到针对此问题的任何问题,这表明这是一个错误。

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

【问题讨论】:

  • 我在 PhpStorm 中收到了相同的弃用消息,但有一个特征。但是当我在课堂上使用该特征时,它立即消失了。

标签: php phpstorm


【解决方案1】:

您能否查看以下链接以进行 php 版本升级:

https://www.php.net/manual/en/migration80.deprecated.php

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 2019-01-16
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多