• PHP traits


    PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好。其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西。
           Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化。先来例子看下语法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    trait myTrait{
      functiontraitMethod1(){}
      functiontraitMethod2(){}
     
    }
     
    //然后是调用这个traits,语法为:
    classmyClass{
      usemyTrait;
    }
     
    //这样就可以通过use myTraits,调用Traits中的方法了,比如:
    $objnewmyClass();
    $obj-> traitMethod1 ();
    $obj-> traitMethod2 ();
    >

      接下来,我们探究下为什么要用traits,举个例子,比如有两个类,分别为business(商务者)和Individual(个人),它们都有地址的属性,传统的做法是,再抽象出一个这两个类都共同有特性的父类,比如client,在client类中设置访问属性address,business和individual分别继承之,如下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // Class Client
    classClient {
      private$address;
      publicgetAddress() {
        return$this->address;
      }   
      publicsetAddress($address) {
        $this->address = $address
      }
    }
        
    classBusiness extendsClient{
      //这里可以使用address属性
    }
     
    // Class Individual
    classIndividual extendsClient{
    //这里可以使用address属性
    }

      但假如又有一个叫order类的,需要访问同样的地址属性,那怎么办呢?order类是没办法继承client类的,因为这个不符合OOP的原则。这个时候traits就派上用场了,可以定义一个traits,用来定义这些公共属性。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // Trait Address
    trait Address{
      private$address;
      publicgetAddress() {
        eturn $this->address;
      }
      publicsetAddress($address) {
        $this->address = $address;
      }
    }
    // Class Business
    classBusiness{
      useAddress;
      // 这里可以使用address属性
    }
    // Class Individual
    classIndividual{
      useAddress;
      //这里可以使用address属性
    }
    // Class Order
    classOrder{
      useAddress;
      //这里可以使用address属性
    }  

    这样就方便多了!

  • 相关阅读:
    Dynamics AX 2012 R2 配置E-Mail模板
    Dynamics AX 2012 R2 设置E-Mail
    Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
    Dynamics AX 2012 R2 耗尽用户
    Dynamics AX 2012 R2 创建一个专用的批处理服务器
    Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
    Dynamics AX 2012 R2 安装额外的AOS
    Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
    Dynamics AX 2012 R2 从代码中调用SSRS Report
    Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
  • 原文地址:https://www.cnblogs.com/zhouht-SuperBoy/p/4701901.html
Copyright © 2020-2023  润新知