PHP 使用 Trait 解决 PHP 单继承问题详解
本文实例讲述了PHP使用Trait解决PHP单继承问题。分享给大家供大家参考,具体如下:
什么是继承?
继承实际上是存在于面向对象程序设计中的两个类之间的一种关系,是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂、更深入的开发。
当一个类拥有另一个类的所有数据和操作时,就称这两个类之间具有继承关系。
被继承的类称为父类,继承了父类的所有数据和操作的类称为子类。
在PHP中用extends表明子类与父类的继承关系。
在面向对象的程序设计中,采用继承的方式来组织设计系统中的类,可以提高程序的抽象程度,更接近人的思维方式,使程序结构更清晰并降低编码和维护的工作量。
- 单继承是指任何一个类都只有一个单一的父类,其结构可以用单纯的树状结构来表示;
- 多继承是指一个类可以有一个以上的父类,它的静态的数据属性和操作从所有这些父类中继承,其结构应以复杂的网状结构来表示。
PHP仅支持单继承,而多继承是通过接口或者Trait来实现的。
PHP的单继承示例:
//单继承:一个子类只能有一个父类 classA{ functionshow(){ echo"A"; } } classB{ functionshow(){ echo"B"; } } classCextendsA{ } $c=newC; $c->show();
使用Trait解决PHP的单继承
自PHP5.4.0起,PHP实现了一种代码复用的方法,称为trait。
- Trait是为类似PHP的单继承语言而准备的一种代码复用机制
- Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method
- Trait和Class组合的语义定义了一种减少复杂性的方式,避免传统多继承和Mixin类相关典型问题
- 无法通过trait自身来实例化
示例:
add($var1,$var2)."\n"; echo"Ressultofmultiplication:".$this->multiplication($var1,$var2); } } $o=newFile(); $o->calculate(5,3);
通过逗号分隔,在use声明列出多个trait,可以都插入到一个类中。
sayHello(); $o->sayWorld(); $o->sayExclamationMark();
示例:
从trait来组成trait 正如class能够使用trait一样,其它trait也能够使用trait。在trait定义时通过使用一个或多个trait,能够组合其它trait中的部分或全部成员。
sayHello(); $o->sayWorld();Trait的抽象成员 为了对使用的类施加强制要求,trait支持抽象方法的使用。
getWorld(); } abstractpublicfunctiongetWorld(); } classMyHelloWorld{ private$world; useHello; publicfunctiongetWorld(){ return$this->world; } publicfunctionsetWorld($val){ $this->world=$val; } }Trait的静态成员 Traits可以被静态成员静态方法定义。
//静态成员 traitCounter{ publicfunctioninc(){ static$c=0; $c=$c+1; echo"$c\n"; } } classC1{ useCounter; } classC2{ useCounter; } $o=newC1();$o->inc();//echo1 $p=newC2();$p->inc();//echo1x;参考:
https://www.php.net/manual/zh/language.oop5.traits.php
https://learnku.com/php/t/37694
https://www..com/what-is-traits-in-php
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。