Trait 是 php5.4引入的新特性,手册上说的一大段没看懂,这里直接来过来。

        Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。

        Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。        

  看了此大神的文章,豁然开朗。参考:http://overtrue.me/articles/2016/04/about-php-trait.html

  什么是Trait?

  翻译过来就是特性,特点。飞机,火车,汽车都可以运载乘客,都有自己的速度。每种交通工具都有自己的特性,比如飞机可以起飞降落的特性。

//定义交通工具类
class
Transport { //装载人数 protected $space = null; //速度 protected $speed = null; public function move(){ echo '运动'; } }

      这里就可以把起飞降落 定义为飞机的特性。

trait Fly
{
    public function flying()
    {
        echo '飞起';
    }

    public function land()
    {
        echo '降落';
    }
}

 飞机,火车,巴士都是交通工具,但是飞机右自己起飞降落的特性 关键字 : use 特性

//飞机
class AirPort extends Transport
{
    use Fly;
    public $speed = 220;

}

//火车
class Train extends Transport
{
    public $speed = 160;
}

//汽车
class Bus extends Transport
{
    public $speed = 40;
}

由于php只能单继承,所以当某个类有多种特性时,不得不把所有基类的功能组合在一起,使得代码可读性非常低,结构也非常复杂。 

如果这里要定义一个鸟类,鸟也是有起飞,降落的特点。可以直接把定义好的trait fly拿过来即可。所以给我的感觉 trait带来的好处就是能够随意组合,耦合性低,可读性高。

 

 

  

posted on 2016-04-28 17:21  睡着的糖葫芦  阅读(230)  评论(0编辑  收藏  举报