记得有一道口试题问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如何多继续的详细内容,更多请关注其它干系文章!