您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
php中trait的优先级-方法名冲突
发布时间:2021-09-24 12:02:13编辑:雪饮阅读()
当trait中和基类、派上类之间有了相同的方法名时会发生些什么呢?
test.php:
<?php
trait Dog{
public $name="dog";
public function bark(){
echo "This is dog";
}
public function eat(){
echo "Dog:This is dog";
}
}
class Animal{
public function eat(){
echo "This is animal eat";
}
}
class Cat extends Animal{
use Dog;
public function drive(){
echo "This is cat drive";
}
public function bark(){
echo "Cat:This is dog";
}
}
$cat = new Cat();
$cat->drive();
echo "<br/>";
$cat->eat();
echo "<br/>";
$cat->bark();
?>
trait Dog{
public $name="dog";
public function bark(){
echo "This is dog";
}
public function eat(){
echo "Dog:This is dog";
}
}
class Animal{
public function eat(){
echo "This is animal eat";
}
}
class Cat extends Animal{
use Dog;
public function drive(){
echo "This is cat drive";
}
public function bark(){
echo "Cat:This is dog";
}
}
$cat = new Cat();
$cat->drive();
echo "<br/>";
$cat->eat();
echo "<br/>";
$cat->bark();
?>
运行结果:
C:\Users\Administrator\PhpstormProjects\untitled>php test.php
This is cat drive<br/>Dog:This is dog<br/>Cat:This is dog
可见:Trait中的方法会覆盖基类中的同名方法,而本类会覆盖Trait中同名方法
从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。
关键字词:php,trait,优先级
上一篇:php多继承解决方案trait
下一篇:php的trait属性冲突