php trait 多重继承的实现案例

php trait 多重继承的实现案例

ID:47403009

大小:35.00 KB

页数:8页

时间:2019-07-04

php trait 多重继承的实现案例_第1页
php trait 多重继承的实现案例_第2页
php trait 多重继承的实现案例_第3页
php trait 多重继承的实现案例_第4页
php trait 多重继承的实现案例_第5页
资源描述:

《php trait 多重继承的实现案例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、phptrait多重继承的实现案例自PHP5.4.0起,PHP实现了代码复用的一个方法,称为traits。Traits是一种为类似PHP的单继承语言而准备的代码复用机制。Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。Trait和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,

2、应用类的成员不需要继承。在我理解说白了就是在继承类链中隔离了子类继承父类的某些特性(就是子类“要用父类的特性的时候”,如果trait有,就优先调用trait的方法、属性等)。var.PHP_EOL;   }    functiona()   {       e

3、cho"a".PHP_EOL;   }} interfaceMyInterface{   function__construct();   functionb();} abstractclassMyAbstract{   protected$var2="MyAbstract_var";    useMyTrait;    functionb()   {       echo"b".PHP_EOL;   }} classMyClassextendsMyAbstractimplementsMyInterface{ 

4、  protected$var3="MyClass_var";    //也可以在这里引用,不区分继承关系   //useMyTrait;   functionc()   {       echo"c".PHP_EOL;   }} $class=newMyClass();$class->a();$class->b();$class->c();输出结果MyTrait_varabc优先级从基类继承的成员被trait插入的成员所覆盖,来自当前类的成员覆盖trait的方法。classBase{   publicfunc

5、tionsayHello(){       echo'Hello';   }}traitSayWorld{   publicfunctionsayHello(){       parent::sayHello();       echo'World!';   }   publicfunctionsayHellos(){       echo'HelloWorld!';   }}classMyHelloWorldextendsBase{   useSayWorld;   publicfunctionsayHell

6、os(){       echo'HelloUniverse!';   }}$o=newMyHelloWwww.shanxiwang.netorld();$o->sayHello(); #HelloWorld!$o->sayHellos(); #HelloUniverse!3、多个trait通过逗号分隔,在use声明列出多个trait,可以都插入到一个类中。traitHello{   publicfunctionsayHello(){       echo'Hello';   }}traitWorld{   p

7、ublicfunctionsayWorld(){       echo'World';   }}classMyHelloWorld{   useHello,World;}$o=newMyHelloWorld();$o->sayHello();#Hello$o->sayWorld();#World4、多Traits冲突的解决如果两个trait都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。为了解决多个trait在同一个类中的命名冲突,需要使用insteadof操作符来明确指定使用冲突方法中的哪一

8、个。以上方式仅允许排除掉其它方法,as操作符可以将其中一个冲突的方法以另一个名称来引入。traitA{   publicfunctionsmallTalk(){       echo'a';   }   publicfunctionbigTalk(){       echo'A';   }}traitB{   publicfunctionsmallTalk(){       echo'

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。