PHP类型提示特征

时间:2013-01-04 12:54:43

标签: php traits type-hinting

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

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

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

static function treat(Trait $instance){...}
但是,遗憾的是,这会导致致命的错误,该错误表明函数期待Trait的实例,但是给出了User的实例。这种类型的提示非常适用于继承和实现,但是如何键入提示特征呢?

3 个答案:

答案 0 :(得分:15)

你不能像DaveRandom所说的那样。你不应该。您可能希望在其上实现接口和typehint。然后,您可以使用特征实现该接口。

答案 1 :(得分:2)

对于将来到这里来的人们,我想详细说明一下Veda的答案。

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

总结;您的想法不是疯狂的想法!实际上,将特质视为单词的常识是有意义的,其他语言也可以做到。由于某些原因,PHP似乎卡在了接口和特征之间。

答案 2 :(得分:0)

如果您想在trait或使用trait的类中创建函数,可以将self用作类型提示,以便您的函数看起来像这样。

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