PHP 类型提示特征

2022-08-30 12:29:34

我有一个特质。为了创造力,让我们称这种特质为特质:

trait Trait{    
    static function treat($instance){    
        // treat that trait instance with care
    }
}

现在,我还有一个使用这个特征的类,User。当尝试使用 User 实例调用 treat 时,一切正常。但我想类型提示,只有使用 Trait 的类的实例才应该作为参数给出,如下所示:

static function treat(Trait $instance){...}

然而,可悲的是,这会导致一个致命错误,即该函数正在期待一个 Trait 的实例,但给出了 User 的实例。这种类型的类型提示非常适合继承和实现,但是我如何类型提示特征?


答案 1

你不能像DaveRandom说的那样。你不应该。您可能希望实现一个接口并在其上键入。然后,您可以使用特征实现该接口。


答案 2

对于将来来到这里的人,我想详细阐述吠陀的答案。

  1. 的确,你不能在PHP中将特征视为特征(具有讽刺意味),说你期望具有某些特征的对象只能通过接口(本质上是抽象特征的集合)来实现。
  2. 其他语言(如 Rust)实际上鼓励使用特征进行类型提示

总之;你的想法不是一个疯狂的想法!实际上,将特征视为常识性很有意义,其他语言也这样做。由于某种原因,PHP似乎被困在接口和特征之间。


推荐