php继承---trait代码复用

 思考:php中继承是单继承,如果某个类有成员要被其他类使用,就需要称为其他类的父类才行,这样可能会导致继承链会长,合适吗?

引入:哦那个继承的角度触发,继承链可以解决问题,但是的确效率会打折扣,同时,如果某些功能是共性使用,但是并不符合继承条件(不属于同一类)

那么使用继承也有所违背面上对象规则,此时可以使用php提供的另外一种代码复用技术trait

trait代码复用【掌握】

定义:trait是为类似php的单继承语言而准备的一种代码复用机制,trait可以使得但继承语言为了复用而不得不继承的尴尬,让面向对象更加纯粹

1.trait是一种类似class的关键字

<?php


// 定义trait
trait show{

}

2.trait内部可以像类一样拥有成员属性(包含静态),成员方法(包含静态),但不能有常量

<?php


// 定义trait
trait show{
    public $name;

    protected $host;                           //允许定义,但实际不用
    private $info; 

    public function show_time(){ 
        echo $this->info;
    }

    protected function showhost(){                //允许定义,但实际不用
        echo $this->name;
    }

    const pi=3.1415926;                //错误  trait中不能有常量
}

3.trait是用来实现代码的复用的,不可以被实例化也不可以被继承

<?php


// 定义trait
trait show{
    public $name;

    protected $host;                           //允许定义,但实际不用
    private $info; 

    public function show_time(){ 
        echo $this->info;
    }

    protected function showhost(){                //允许定义,但实际不用
        echo $this->name;
    }


}


new show();                //trait 不允许被实例化

4.trait是用来将公共代码提供给其他类使用的,而类要使用trait的掐你是加载对应的trait

<?php


// 定义trait
trait Show{
    public $name="d";
    public function show_time(){ 
        echo $this->name;
    }

}



//类中加载trait
class add{
    //加载:使用use关键字
    use Show;           //use 就表示将trait show中所有的东西拿到了当前类add中
}


//使用trait中的内容
$s=new add();
$s->show_time();                //show add类中自己没有show_time方法,但是因为使用了trait show 所以可用

5.一个类可以使用多个trait

<?php


// 定义trait
trait Show{
    public $name="d";
    public function show_time(){ 
        echo $this->name;
    }

}

trait get{
    public $age=18;

    public function get_age(){
        echo $this->age;
    }
}



//类中加载trait
class add{
    //加载:使用use关键字
    use Show;           //use 就表示将trait show中所有的东西拿到了当前类add中
    use get;
}


//使用trait中的内容
$s=new add();
$s->show_time();                //show add类中自己没有show_time方法,但是因为使用了trait show 所以可用
$s->get_age();

猜你喜欢

转载自www.cnblogs.com/xiaowie/p/12303583.html
今日推荐