1.9. PHP之 traits技术

traits:

它使得类里面的代码(主要指属性和方法)更加灵活的被复用

traits 和 include的有点相似

  • 通过include技术我们可以引入文件
  • 通过traits技术我们可以引入代码

实际使用:

在很多个类中如果有一些方法复用时,我们能做的只能是把这些重复的方法放在他们共同的父类中,但是这些类已经有父类了怎么办?

没有办法使一个类同时继承多个类,这样我们对于这些需要重复使用的方法就没办法自由的编写了,如果给他们不同的父类加上这些

方法,就会有很多重复的代码,不利于后期维护!

1)用traits技术解决这个问题

trait trait名称{

           需要重复使用的方法可以放在这里,和类里面编写的方法一样;

}

注:trait名称最好以 t 开头

trait tKnife{
    public function pencil($pencil){
        echo $pencil.'ok!';
    }
}

2)trait使用方法

在类的内部使用:

use trait 名称

即可使用被use的trait里面的各种方法,类似于include

3)优先级

从基本类继承的成员被trait插入的成员所覆盖,优先顺序是来自当前类的成员覆盖了trait的方法,而trait则覆盖了被继承的方法

4)通过逗号分隔,在use声明列出多个trait,可以插入到一个类中

use trait 名称1,trait 名称2;

5)冲突的解决

如果两个trait都插入了一个同名的算法,如果没有明确冲突将会产生一个致命错误

      1.为解决多个trait在同一个类中的命名冲突,需要使用insteadof操作符来明确指定使用冲突方法中的哪一个

trait A{
    public function smallTalk(){
        echo 'a';
    }
    public function bigtalk(){
        echo 'A';
    }
}

trait B{
    public function smallTalk(){
        echo 'b';
    }
    public function bigTalk(){
        echo 'B';
    }
}

class Talker{
    use A,B{
        B::smallTalk insteadof A;
        A::bigtalk insteadof B;
    }
}

     2. 

class Aliased_Talker{
    use A,B{
        B::smallTalk insteadof A;
        A::bigtalk insteadof B;
        B::bigTalk as talk;
    }
}
//注:在使用as前必须解决掉冲突问题
发布了198 篇原创文章 · 获赞 82 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_38134491/article/details/104230493
1.9