有大佬遇到过这个问题吗:php中interface和trait的异同?求指导!

traittrait_name{
publicfunctionfunction_name();
}
interfaceinterface_name{
publicfunctionfunction_name();
}
在学php,没实际经验,感觉interface和trait很类似,都是一种特殊的类.
等到需要的时候,在当前类中写清具体方法,在通过implement,extends,use等去调用它们.
这两种设计有什么精妙之处?有什么区别呢?
看了下各种回答,觉得挺有道理.trait和interface恰好相反,interface关心的是接口,把控全局,把实现和细节丢给其他人,而trait完全不关心接口(约定),trait内部写好具体的功能细节,其他人谁要用use引入就行.(正所谓复用代码).而trait的"多继承",在一个类中引入多个trait,又进一步强化了"复用代码".
牧羊人nacy
浏览 311回答 2
2回答

慕村225694

trait必须实现方法体,interface不能实现方法体。trait可以预定义类成员,但是成员不能被调用者覆盖,必须有相同的初始化参数。interface不允许预定义成员。一个类可以实现多个interface,也可以使用多个trait。从另一个角度来讲,trait是为了来解决不能多继承的。abstract介于两者之间。

长风秋雁

interface和trait是2个不一样的东西interface用来定义接口标准,都是抽象类。比如你可以定义一个people的interface,里面规定了只能定义一下people相关的方法。trait的是为了解决多继承问题的,因为php不支持多继承。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript