我对trait类的一点儿认识 :
trait类, 是为了解决php类的单继承问题
trait类, 是个方法集
trait类, 是父类与子类之间的一个类, 扩充父类的方法
trait类, 不能被实例化, 不能被继承extends
trait类, 重写父类同名的方法后, 在子类中, trait类中的方法将覆盖父类方法
trait类的声明 :
trait类的定义和类相似 , 但以 trait 关键字来声明
trait T_name1 { public functiong method1() { //方法一 ; } public functiong method2() { //方法二 ; } // .... }
在子类中使用use关键字引入trait类
class SubClass extends SuperClass { use T_name1; use T_name2; /... }
方法的优先级为 : 子类 ---> trait类 ---> 父类
代码示例:
class Animal { public function cry() { echo 'Say : 吼!!!'.'<br>'; } public function eat() { echo '吃'.'<br>'; } } // 不直接变动父类, 通过 traits 增加新的方法集, 或修改父类方法 trait Action { public function cry() { echo 'Say : 啊呜!'.'<br>'; } public function run() { echo '跑得快!'.'<br>'; } public function sleep() { echo '睡一觉!'.'<br>'; } } class Dog extends Animal { // 引入trait类 use Action; public function eat() { echo '狗连***都吃'.'<br>'; } public function sleep() { echo '狗趴着睡!'.'<br>'; } } $my_dog = new Dog(); $my_dog->cry(); $my_dog->eat(); $my_dog->run(); $my_dog->sleep();
运行结果 :
Say : 啊呜!
狗连***都吃
跑得快!
狗趴着睡!