为了账号安全,请及时绑定邮箱和手机立即绑定

php中interface和trait的异同?感激不尽

php中interface和trait的异同?感激不尽

阿波罗的战车 2019-08-24 23:11:13
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介于两者之间。
                            
查看完整回答
反对 回复 2019-08-24
?
月关宝盒

TA贡献1772条经验 获得超5个赞

interface和trait是2个不一样的东西interface用来定义接口标准,都是抽象类。比如你可以定义一个people的interface,里面规定了只能定义一下people相关的方法。
trait的是为了解决多继承问题的,因为php不支持多继承。
                            
查看完整回答
反对 回复 2019-08-24
  • 2 回答
  • 0 关注
  • 328 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信