PHP如何多继承

记得有一道面试题问php是否支持多继承?
答案:不可以,只支持单继承。
如何实现多继承呢?
答案:可以使用interface或trait实现。()
为什么会想到这个问题,因为想到如果类继承多个接口,然后他们之间还有相同的属性和方法会引用谁的方法或属性,谁又会被覆盖?
总结:
1.使用interface声明类不能被实例化,并且属性必须是常量,方法不能有方法体
2.trait声明的类不能被实例化,由use引入,会覆盖父类的相同属性及方法,如果有多个use,那么按顺序下面的覆盖最上面的相同的属性及方法
接口是什么?
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过interface关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
trait是什么?
看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,
其作用有两个:表明类可以做什么;提供模块化实现。
Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。
Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类复用method.Trait和Class组合的语义定义了一种减少复杂性的方式,避免传统的多继承和Mixin类相关典型问题。
Trait和Class相似,但仅仅旨在用细粒度和一致的方式来组合功能。无法通过trait自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个Class之间不需要继承。
优先级
从基类继承的成员被trait插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了trait的方法,而trait则覆盖了被继承的方法。

通过逗号分隔,在use声明列出多个trait,可以都插入到一个类中。
以上就是PHP如何多继承的详细内容,更多请关注其它相关文章!