PHP中的Trait类详解

通俗来讲, Trait类不是类,无法直接使用new关键词来创建对象。

传统的PHP类是单一继承模式,即每个类只能继承一个父类。

Trait类的出现让PHP类可以继承多个“父类”。

一、如何使用:
定义一个Class :

Class cDemo
{
public function cfun()
{
return __METHOD__;
}
}
定义两个Trait类:

Trait tDemo1
{
public function fun1()
{
return __METHOD__;
}
}

Trait tDemo2
{
public function fun2()
{
return __METHOD__;
}
}
接下来使用一个class 来继承上面的自定义的类

class myClass extends cDemo
{
// 引用Trait类
use tDemo1, tDemo2;
}

// 实例化类
$obj = new myClass();

// 调用父类方法
echo $obj->cfun(); // cDemo::cfun 这个是父类cDemo中定义的方法

// 调用Trail中的方法
echo $obj->fun1(); // tDemo1::fun1
echo $obj->fun2(); // tDemo2::fun2
二、注意事项
优先级关系 本类中的方法 > Trait中的方法 > 父类中的方法

当一个类继承了多个Trail,且多个Trait中都包含相同的方法时,调用此方法则会报错;解决方案:

使用 insteadof 关键字和 as 关键字

// 这里假设tDemo1 和 tDemo2 中都含有fun1 方法

class myClass extends cDemo
{
// 引用Trait类
use tDemo1, tDemo2{
tDemo2::fun1 insteadOf tDemo1;
tDemo1::fun1 as fun2;
}
}

————————————————
版权声明:本文为CSDN博主「十年励志」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42748455/article/details/111168641

THE END