记得有一道面试题问php是不是支撑多继续?
答案:不可以,只支撑单继续。
怎样完成多继续呢?
答案:可以运用 interface 或 trait 完成 。(引荐进修:PHP编程从入门到通晓)
为何会想到这个题目,由于想到如果类继续多个接口,然后他们之间另有雷同的属性和要领会援用谁的要领或属性,谁又会被掩盖?
总结:
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 则掩盖了被继续的要领。
class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello();
经由过程逗号分开,在 use 声明列出多个 trait,可以都插进去到一个类中。
以上就是PHP怎样多继续的细致内容,更多请关注ki4网别的相干文章!