php trait 多继承问题
# php trait 多继承问题
简介
php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,
php 从5.4出了Trait这个特性
注意事项
- Trait类不能实例化
- Trait类里面的方法只能使用public权限
trait的优先级
优先级:自身方法>trait的方法>继承的方法(就是这样子的。)
使用示例
例:
<?php
trait A{
public function aa(){
return 'aaa';
}
}
trait B {
public function bb(){
return 'bb';
}
}
class User{
public function hello(){
return 'hello';
}
}
class VipUser extends User{
use A;
use B;
public function hello2(){
return 'hello2';
}
//重写
public function aa(){
return 'AAAAA';
}
}
$vip = new VipUser();
echo $vip->aa();
echo $vip->bb();
运行结果
多个trait里面方法重名冲突问题
当不同的trait中,却有着同名的方法或属性,会产生冲突,可以使用insteadof或 as进行解决,insteadof 是进行替代,而as是给它取别名
例:
<?php
class User {
public function hello() {
return 'hello';
}
}
trait B {
public function bb() {
return 'bb';
}
}
trait A {
public function aa() {
return 'aaa';
}
public function bb() {
return 'BBBBB';
}
}
class VipUser extends User {
use A,B{
// 如果调用的方法名为bb则,我们B中的方法指向到A中,
// 而自己本身的bb方法则修改为bbb然后指向到自己的内容
A::bb insteadof B;
B::bb as bbb;
}
public function hello2() {
return 'hello2';
}
}
$vip = new VipUser();
echo $vip->bb();
echo $vip->aa();
运行结果
本文作者:makalo
本文链接:https://www.cnblogs.com/makalochen/p/12969265.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步