Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的...
本文旨在记录,所有内容仅代表漠漠睡个人观点,大佬可绕;
先看PHP解释
Trait
PHP 实现了一种代码复用的方法,称为 trait。
Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。
Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。
trait 写法与class类相同,但是trait不能被实例化,只能被引用,引用方式 在类中use
同名函数优先级:
本类 > trait > 父类
trait有方法重复时会报错,届时,可以使用instedadof进行覆盖,覆盖后,将使用覆盖名,被覆盖的可以使用as进行重命名,届时被覆盖类方法可以在本类中使用重命名的方法进行调用
上代码:
trait Demo1{ public function A(){ return __METHOD__; } } trait Demo2{ public function A(){ return __METHOD__; } } class Test{ public function A(){ return __METHOD__; } } class Test1 extends Test{ use Demo1,Demo2{ Demo1::A insteadof Demo2; Demo2::A as Demo2A; } // public function A(){ // return __METHOD__; // } public function B(){ return $this->A(); } public function C(){ return $this->Demo2A(); } } $obj = new Test1; print_r($obj->B());
说明:
使用__FUNCTION__仅传回函数名称
使用__METHOD__传回类名称与函数名称