批改状态:合格
老师批语:trait很灵活, 这里尽可能举出各种场景, 实际开发中可能并不会用到这么多的,但学习还是要多了解一些
1.代码复用
<?php//trait功能:代码复用trait tindex{public function fun(){printf("<pre>%s</pre>",print_r(get_class_vars(__CLASS__), true));}// get_class_vars:返回由类的属性组成的数组}class Test1{protected $name ='鹰眼';protected $occ = '七武海';use tindex;}class Test2{protected $name ='红发';protected $occ = '海贼';use tindex;}echo (new Test1)->fun();echo "<hr>";echo (new Test2)->fun();

2.在继承上下文中的应用
<?php//trait功能:在继承上下文中的应用trait tdemo{public static function fun(){return "这是trait中的fun方法";}}//父类/基类abstract class Dood{public static function fun(){return "这是基类中的fun方法";}}//子类class sonDood extends Dood{//引用traituse tdemo;public static function fun(){return "这是子类中的fun方法";}}// 子类,父类,trait中存在同名方法的时候, 而trait在子类中调用时,子类 > trait > 父类echo sonDood::fun();

3.实现功能扩展
<?php// trait功能: 实现功能扩展trait good{public function getfun(){printf("<pre>%s</pre>",print_r(get_class_methods(__CLASS__), true));// get_class_methods:返回由类的方法名组成的数组}}trait user{protected $we = "下午好";public function get(){return $this->we;}}trait demo{use good;use user;}class cindex{use demo;}echo (new cindex)->get();echo "<hr>";echo (new cindex)->getfun();

4.解决命名冲突的问题
<?php// trait功能:解决命名冲突的问题trait good{public function fun(){return "这是good中的fun()";}}trait good1{public function fun(){return "这是good1中的fun()";}}trait demo{use good,good1{//取别名good::fun as refun;//调用good1中的fun 替代good中fungood1::fun insteadOf good;}}class index{use demo;}echo (new index)->refun();echo "<hr>";echo (new index)->fun();

5.trait 和 interface接口的组合
<?php// trait功能: trait 和 interface接口的组合//接口if(!interface_exists('inter')):interface inter{//抽象方法public function test();}endif;//traitif(!trait_exists('tra')){trait tra{protected $name ='trait';//实现public function test(){return "这是把原本在实现类中实现的抽象方法,改到{$this->name}中实现";}}}// 实现类class demo implements inter{use tra;}//客户端echo (new demo)->test();

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号