php和java,c++一样都是单继承模式。但是像python,是支持多继承(即Mixin模式)。那么如何在php中实现多继承模式?这就需要使用trait。
方法优先级
上面输出内容分别为model:model
,trait:model2
,model:model
,trait:model2
.可以看出,trait方法优先级为 当前对象>trait>父类,以上规则同样使用于静态调用。
属性定义要特别小心!!trait中可以定义属性。但是不能和use
trait当前类定义的属性相同,否则会报错:define the same property
。但是,如果父类使用了trait,子类定义trait中存在的属性,则没有问题。
私有属性私有方法。triat中可以方位use类的私有属性私有方法!!
从以上可以看出,trait本身是对类的一个扩展,在trait中使用$this
,self
,static
,parent
都与当前类一样,zend底层将trait代码嵌入到类当中,相当于底层帮我们实现了代码复制功能。
多个trait相同方法。
多trait相同的方法,需要使用instanceof 指定使用哪个trait的方法。instanceof后面的使用的trait。可以使用as设置添加方法别名(添加,原有方法还是能调用!!)。as还可以改变方法的访问控制
Arrayabletrait2::logname as private
改为私有方法。