Avatar ·

PHP中的Trait与Interface:何时使用?

大家好!我是一名初学PHP的开发者,我经常搞混什么时候该用trait,什么时候该用interface。它们似乎都能帮助代码复用,但我感觉这是不同的东西。 这里有个具体例子。我有`Car`类和`Bicycle`类。它们都能移动,所以我创建了`MovableInterface`接口,里面有`move()`方法。这能工作,但每个类里我都得自己写`move()`方法的实现。 后来我了解了trait。我创建了`EngineTrait` trait,里面有`startEngine()`方法。现在我可以把它引入`Car`类,但不能引入`Bicycle`,因为自行车没有引擎。这时我就想:把`startEngine()`做成接口方法不是更好吗?但那样我就得在`Bicycle`里也实现它,而它并不需要。 结果我脑子里一团浆糊。有人说trait是“复制粘贴代码”,而interface是“契约”。但怎么知道哪里需要什么契约?请用通俗的方式指点一下,什么时候用trait,什么时候用interface。