批改状态:合格
老师批语:trait就是传统函数库的替代品, 记住这个就好办了
<?phpinterface iStu{const NAME= '小明';//接口类中设计两种方法public function getClass();public function getAge();}abstract class aStu implements iStu{public $class='三年级一班';//抽象类中实现部分方法public function getClass(){return iStu::NAME.'来自'.$this->class;}}interface iStu1{const NATION='中国';public function from();}//利用接口实现多继承class Stu extends aStu implements iStu1{public $age;public function __construct(int $age){$this->age=$age;}//实现iStu另一种抽象方法public function getAge(){return iStu::NAME.'今年'.$this->age.'岁';}//实现iStu1的方法public function from(){return iStu::NAME.'出生于'.iStu1::NATION;}}$stu=new Stu(13);echo $stu->getAge(),'<br>';echo $stu->getClass(),'<br>';echo $stu->from(),'<br>';//运行结果// 小明今年13岁// 小明来自三年级一班// 小明出生于中国
<?phptrait tStu{public function profession(){return 'trait:'.$this->name.'是程序员';}}class Stu1{public $name='李四';public function profession(){return 'parent:'.$this->name.'是公务员';}}class Stu2 extends Stu1{// 直接继承父类}class Stu3 extends Stu1{// 继承父类并引用traituse tStu;}class Stu4 extends Stu1{// 继承父类并引用traituse tStu;public function profession(){return 'self:'.$this->name.'是医生';}}$stu2=new Stu2;$stu3=new Stu3;$stu4=new Stu4;echo $stu2->profession(),'<br>';echo $stu3->profession(),'<br>';echo $stu4->profession();// 运行结果// parent:李四是公务员// trait:李四是程序员// self:李四是医生
总结:interface 和 trait 类都很好的实现了代码的复用与类的多继承,
interface 类只能包含常量和抽象方法,trait 类可以包含变量和方法
interface 和 trait 都不能直接生成对象,前者需要 implements 到类,trait 类需要 use 到类中
trait 类中的方法在调用时具有优先级:子类方法>trait方法>父类方法
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号