php trait

Trait中的方法或属性会覆盖基类(如果有继承关系)中的同名的方法或属性,而本类会覆盖Trait中同名的方法,如果本类或基类和Trait有同名属性会冲突报错

基本定义

和class很像。Trait基本定义如下

trait Dog{
    public $name="dog";
    public function bark(){
        echo "This is dog";
    }
}

基本使用

只要在类里use之后,就可以使用Trait里的方法

class Cat extends Animal{
    use Dog;
    public function drive(){
        echo "This is cat drive";
    }
}

与当前类同名

trait很像继承,所以当当前类与trait类方法同名时候,当前类会覆盖trait方法

trait B
{
    public function test()
    {
        echo 1;
    }
}
class A
{
    use B;
    public function test()
    {
        echo 2;
    }
}

(new A)->test();
// 2

引入多个Trait

用逗号分隔,如果有重名的方法或熟悉使用as取别名 使用insteadof表示替代

class dog{
    use trait1,trait2{
        trait1::eat insteadof trait2;
        trait1::drive insteadof trait2;
        trait2::eat as eaten;
        trait2::drive as driven;
    }
}

参考文献

PHP之Trait详解

相关文章

此处评论已关闭