【发布时间】: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 中收到了相同的弃用消息,但有一个特征。但是当我在课堂上使用该特征时,它立即消失了。