zoukankan      html  css  js  c++  java
  • php5.4 trait 理解与学习

      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带来的好处就是能够随意组合,耦合性低,可读性高。

     

     

      

  • 相关阅读:
    tensflow安装
    Dubbo的服务注册--Zookeeper
    Dubbo源码分析之Exporter---服务暴露(本地和远程)
    Dubbo源码分析之XML的Bean解析
    Dubbo的SPI可扩展机制的源码分析
    Dubbo源码分析(三)-----消费者引用服务启动时序
    导出mysql的表结构的字段为excel
    Dubbo源码分析(二)-----提供者启动过程分析
    dubbo的api的配置(基于注解的配置)
    Dubbo源码分析(一)-----包结构的分析
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5443460.html
Copyright © 2011-2022 走看看