PHP 面向对象 (十)Traits

traits

作用:解决代码复用问题,解决单一继承问题

与普通类的异同

  • 相同点
    1. trait 能够像普通的类一样定义属性,方法(包含抽象的、静态的)
    2. trait 引入到基类里面,其子类里面也能访问trait里面的属性和方法。
  • 不用点
    1. trait不用实例化就能访问定义的普通方法以及属性。
    2. trait里面不能定义构造函数。
细节
  1. Trait中的方法或属性会覆盖 基类中的同名的方法或属性,而本类会覆盖Trait中同名的属性或方法
  2. 一个类可以组合多个Trait,通过逗号相隔
  3. 解决不同trait同名冲突,使用别名

实践

<?php
Trait TraitOne {
    public $propertyOne = 'argumentOne';

    public function sayHello()
    {
        return 'My trait one';
    }
}

Trait TraitTwo {
    public function sayHello()
    {
        return 'My Trait Two';
    }
}

class MyClass {

    use TraitOne, TraitTwo {

        TraitTwo::sayHello insteadof TraitOne;  //指定要使用的trait

        Traittwo::sayHello as twoSayHello; //同方法名的trait设置别名

    }

    public function traitMethodValue()
    {
        return $this->twoSayHello();   //调用trait别名方法
    }
}

$myClass = new MyClass();
echo $myClass->twoSayHello();

class MyClassSon extends MYClass {

}

$myClass = new MyClassSon();
echo $myClass->twoSayHello(); //traits方法可以被继承

复制代码,即可运行。 谢谢你的浏览,如有错误,欢迎指正哈!!!

本作品采用《CC 协议》,转载必须注明作者和本文链接
写的不好,就当是整理下思绪吧。
讨论数量: 2

trait 能够像普通的类一样定义属性,方法(包含抽象的、静态的、抽象的) 这句户 重复了抽象的

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!