php trait 使用详解

摘一段官方的注释:

自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。

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

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

上边的解释已经很明显了,个人理解就是,自己写了一个类,里边有很多方法(这里就可以任意发挥了,比方说是数据库操作转换类,在查询出数据库数据库可能有很多种mysql、mongo、redis、es之后统一的增加一些方法)然后在需要使用的地方use一下,相当于require了一个文件文件里边有很多方法,并且可以读区当前class里边的任意数据,是不是很方便操作东西了呢

单实际怎么去用呢这就很简单了,注意定义的局部方法和局部变量,哪怕是类级别的变量都可以直接使用,理解为merge了一些

重复的方法和属性,

如果有多个需要引用的trait

use Cat, Dog {
    Cat::eat insteadof Dog;         // 此处代表使用cat中的eat代替dog中的eat
    Cat::sleep insteadof Dog;       // 此处代表使用cat中的eat代替dog中的eat
    Dog::eat as DogEat;             // 或者使用as使用别名
    Dog::sleep as public DogSleep;  // 这里还可以更改复制出来的方法的访问权限,注意不影响traid里边的原始方法权限
}

请注意,7.0版本之后重复的属性可以定义,但是他的访问权限和值在定义的时候必须相等

trait Cat
{
    public function eat()
    {
        echo $this->name . '家的猫咪在吃饭' . PHP_EOL;
    }

    protected function sleep()
    {
        echo $this->name . "家的猫咪在睡觉" . PHP_EOL;
    }
}

trait Dog
{
    public function eat()
    {
        echo $this->name . '家的狗狗在吃饭' . PHP_EOL;
    }

    protected function sleep()
    {
        echo $this->name . "家的狗狗在睡觉" . PHP_EOL;
    }
}

class Student
{
    use Cat, Dog {
        Cat::eat insteadof Dog;         // 此处代表使用cat中的eat代替dog中的eat
        Cat::sleep insteadof Dog;       // 此处代表使用cat中的eat代替dog中的eat
        Dog::eat as DogEat;             // 或者使用as使用别名
        Dog::sleep as public DogSleep;  // 这里还可以更改复制出来的方法的访问权限,注意不影响traid里边的原始方法权限
    }

    public $name = "张三";

}

$student = new Student();

$student->DogEat();
$student->DogSleep();

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值