自PHP5.4.0起,PHP实现了一种代码复用的方法,称之为Trait;Trait可以看做是类的实现部分,Trait为php单继承限制,提供了一套灵活的代码复用机制;
trait 功能1:实现代码的复用 实例演示:
// trait 功能1:实现代码的复用trait show{public function show(){printf('<pre>%s</pre>',print_r(get_class_vars(__CLASS__),true));}}class one{use show;protected $name="胡歌";protected $age="36";}$s=new one;echo $s->show();class two{use show;protected $name="山东";protected $age="26";}$s=new two;echo $s->show();
实现类的扩展功能 实例演示
<?php// trait 实现类的扩展功能// 添加两个方法,打印所有属性,打印所有的方法trait demo1{public function show(){printf('<pre>%s</pre>',print_r(get_class_vars(__CLASS__),true));}}trait demo2{public function getMethod(){printf('<pre>%s</pre>',print_r(get_class_methods(__CLASS__),true));}}trait demo3{use demo1,demo2;}class one{use demo2;public $fruit="西瓜柿";public $prise="6元/斤";public function getInfo(){return $this->fruit.":".$this->prise;}}$a=new one();echo $a->getInfo();echo $a->getMethod();class two{use demo1;public $fruit="西瓜柿";public $prise="6元/斤";public function getInfo(){return $this->fruit.":".$this->prise;}}$a=new two();echo $a->getInfo();echo $a->show();?>
trait 组合中命名冲突的解决方案 实例演示
<?PHP// trait 组合中命名冲突的解决方案trait demo1{public function display(){return __METHOD__;}}trait demo2{public function display(){return __METHOD__;}}trait demo3{use demo2,demo1{// 给demo2起个别名d2demo2::display as d2;// 调用demo1::display替换掉demo2::displaydemo1::display insteadof demo2;}}class work{use demo3;}$work= new work();var_dump($work);echo "<br/>";echo $work->display();echo "<br/>";echo $work->d2();?>
trait与interface组合
<?PHP// trait 功能4 trait与interface组合interface iDemo{public static function index();}trait Demo{// 将接口方法中的抽象方法的实现过程交给trait来处理public static function index(){return __METHOD__;}}// 工作类class hello implements iDemo{use Demo;}// 客户端echo hello::index();?>
Trait,子类,父类中存在同名方法时,Trait在子类中调用,此时的优先级为:子类>trait>父类;
实例演示:
<?phptrait show{public static function getAge(){return __METHOD__;}}class One{public static function getAge(){return __METHOD__;}}class two extends One{use show;public static function getAge(){return __METHOD__;}}echo two::getAge();//two::getAge?>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号