PHP----trait

2020-12-17  本文已影响0人  JuMinggniMuJ

查看框架源码的时候,发现trait这一个东西,在它里面可以定义属性和方法,很像类,但是却不是类。

1.和类的区别:

我们发现在类中我们可以使用trait,但是引用位置却不一样:
1.在类中引用类时,是在类的外部引用(use class_name)
2.在类中引用trait时,是在类的内部引用(use trait_name)

我们定义一个类之后,我们可以实例化这个类,但是trait却不可以实例化,trait更像是一段公共代码,直接将属性和方法植入类中,实现代码复用。

2.trait的属性:

当我们在trait中定义属性时,在引用它的类中可以直接使用,但是当我们在trait和引用类中同时定义相同属性之后会直接报错

3.trait的方法:

我们知道在trait中定义一个方法,在引用它的类中可以直接使用
1.当引用的类中定义了同名方法时,会调用类中的方法,类中的方法优先级高于trait中的方法优先级
2.当引用的类继承一个类,然后这个父类中定义了和trait中的同名方法,trait中的方法优先级高于父类方法的优先级
3.优先级顺序:
    类中方法 > trait中方法 > 父类中方法

4.引用多个trait:

在类中可以引用多个trait,但是当引用的两个trait中定义了同名方法时就会发生错误,这个时候我们可以指定使用哪个trait中的方法:

    use traitA,traitB{
        traitA::functionA insteadof traitB;
        traitB::functionB insteadof traitA;
        traitB::functionC  as traitbfunctionc;
    }
上一篇下一篇

猜你喜欢

热点阅读