traittrait_name{publicfunctionfunction_name();}interfaceinterface_name{publicfunctionfunction_name();}在学php,没实际经验,感觉interface和trait很类似,都是一种特殊的类.等到需要的时候,在当前类中写清具体方法,在通过implement,extends,use等去调用它们.这两种设计有什么精妙之处?有什么区别呢?看了下各种回答,觉得挺有道理.trait和interface恰好相反,interface关心的是接口,把控全局,把实现和细节丢给其他人,而trait完全不关心接口(约定),trait内部写好具体的功能细节,其他人谁要用use引入就行.(正所谓复用代码).而trait的"多继承",在一个类中引入多个trait,又进一步强化了"复用代码".
2 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
trait必须实现方法体,interface不能实现方法体。trait可以预定义类成员,但是成员不能被调用者覆盖,必须有相同的初始化参数。interface不允许预定义成员。一个类可以实现多个interface,也可以使用多个trait。从另一个角度来讲,trait是为了来解决不能多继承的。abstract介于两者之间。
月关宝盒
TA贡献1772条经验 获得超5个赞
interface和trait是2个不一样的东西interface用来定义接口标准,都是抽象类。比如你可以定义一个people的interface,里面规定了只能定义一下people相关的方法。trait的是为了解决多继承问题的,因为php不支持多继承。
添加回答
举报
0/150
提交
取消