分析一下PHP中的Trait机制原理与用法

来源:青灯夜游 发布时间:2020-04-28 13:56:50 阅读量:778

Trait介绍:

1、自PHP5.4起,PHP实现了一种代码复用的方法,称为trait。

2、Trait是为类似PHP的单继承语言二准备的一种代码复用机制。

3、Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。

4、trait实现了代码的复用,突破了单继承的限制;

5、trait是类,但是不能实例化。

6、当类中方法重名时,优先级,当前类>trait>父类;

7、当多个trait类的方法重名时,需要指定访问哪一个,给其它的方法起别名。

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

trait Demo1{

 public function hello1(){

  return __METHOD__;

 }

}

trait Demo2{

 public function hello2(){

  return __METHOD__;

 }

}

class Demo{

 use Demo1,Demo2;//继承Demo1和Demo2

 public function hello(){

  return __METHOD__;

 }

 public function test1(){

  //调用Demo1的方法

  return $this->hello1();

 }

 public function test2(){

  //调用Demo2的方法

  return $this->hello2();

 }

}

$cls = new Demo();

echo $cls->hello();

echo "<br>";

echo $cls->test1();

echo "<br>";

echo $cls->test2();

运行结果:

1

2

3

Demo::hello

Demo1::hello1

Demo2::hello2

多个trait方法重名:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

trait Demo1{

 public function test(){

  return __METHOD__;

 }

}

trait Demo2{

 public function test(){

  return __METHOD__;

 }

}

class Demo{

 use Demo1,Demo2{

  //Demo1的hello替换Demo2的hello方法

  Demo1::test insteadof Demo2;

  //Demo2的hello起别名

  Demo2::test as Demo2test;

 }

 public function test1(){

  //调用Demo1的方法

  return $this->test();

 }

 public function test2(){

  //调用Demo2的方法

  return $this->Demo2test();

 }

}

$cls = new Demo();

echo $cls->test1();

echo "<br>";

echo $cls->test2();

运行结果:

1

2

Demo1::test

Demo2::test


标签: PHP
分享:
评论:
你还没有登录,请先