查看框架源码的时候,发现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;
}
网友评论