本章总结与练习

原创 2018-12-16 12:07:49 252
摘要:trait弥补了php中没有双继承的缺点<?php // trait 代码复用机制 // 1.可以给当前的类添加新的特性或功能,相当于类中的插件,可以不修改父类的情况下,扩展当前类的功能 // 3.和类的语法相同,但不可以实例化类 // 4. 优先级 子类>trait>父类 同名方法 // 

trait弥补了php中没有双继承的缺点

<?php
// trait 代码复用机制
// 1.可以给当前的类添加新的特性或功能,相当于类中的插件,可以不修改父类的情况下,扩展当前类的功能
// 3.和类的语法相同,但不可以实例化类
// 4. 优先级 子类>trait>父类 同名方法
// 5.命名冲突的解决方案:1.替换 2.别名

//trait 1
trait Js
{
    public function js()
    {
        return '带带大师兄';
    }

    public function l(){
        return 'trait1-------辣是真滴牛批';
    }
}
//trait2
trait Jss
{
    public function l(){
        return 'trait2-------辣是真滴牛批';
    }
}

//父类
class Auto
{
    public $brand; //品牌
    public $purpose; //用途

    //构造器
    public function __construct($brand,$purpose)
    {
        $this->brand = $brand;
        $this->purpose = $purpose;
    }
    //保养
    public function by(){
        return '授权的4s店';
    }

    public function l(){
        return '父类-----辣是真滴牛批';
    }
}

//子类
class Bus extends Auto
{
    //引入trait
    //命名冲突的解决方案:1.替换 2.别名
    use Js,Jss
    {
        //把 Jss中的l类给替换掉
        Js::l insteadof Jss;
        //将jss中的l类改个名字为ll
        Jss::l as ll;
    }

//
//    public function l(){
//        return '子类----辣是真滴牛批';
//    }
}
//实例化
$bus = new Bus('奔驰','跑滴滴');
//访问子类
echo $bus->brand,'<br>';
echo $bus->purpose,'<br>';
//通过子类引入trait来访问里面的方法
echo $bus->js(),'<br>';
//访问l方法
echo $bus->l(),'<br>';
//改完名字访问trait2中的ll方法
echo $bus->ll();
?>


批改老师:天蓬老师批改时间:2018-12-16 12:29:54
老师总结:php 是不支持多继承的 , traits技术,算是弥补了这个遗憾吧

发布手记

热门词条