PHP trait优先级详解

发布 : 2019-06-10 分类 : 后端 浏览 :

实践代码一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
trait trait1{
public function fun1(){
echo 'trait1';
}

}

class base {
use trait1;
public function fun1(){
echo 'base';
}
}

class class1 extends base {

}

$ref = new ReflectionClass('class1'); //PHP反射机制
$class1 = $ref->newInstanceArgs(); //创建一个示例

//执行结果"base",说明trait方法和类方法同级的情况下,类方法优先级更高
$class1->fun1();

实践代码二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
trait trait1{
public function fun1(){
echo 'trait1';
}

}

class base {
public function fun1(){
echo 'base';
}
}

class class1 extends base {
use trait1;
}

$ref = new ReflectionClass('class1');
$class1 = $ref->newInstanceArgs();

//执行结果“trait1”,结论,同样的方法名,在同级类中,trait方法比继承的方法优先级更高
$class1->fun1();

结语

综合代码可以得出结论,在trait继承中,优先顺序依次是:来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法(当前类>trait>被继承类)。

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹