trait的详解

文章目录

概念

用于模拟实现多继承。由于php只支持单继承,要实现继承多个类就成了难题了,而trait正是为了解决这个难题而诞生的。

特点

  • 定义trait要以trait关键字开头,其他与类无异。
  • 一般trait不加成员属性,只加成员方法
  • trait的方法要想被引入的类使用,只能用public修饰
  • trait不能实例化
  • trait可以引入trait
class person
{
    use coat;
    use pants;
    public function getEquipment()
    {
        $this->getCoat();
        $this->getPants();
    }
}
trait coat
{
    public function getCoat()
    {
        echo "装备上衣</br>";
    }
}
trait pants
{
    public function getPants()
    {
        echo "装备裤子</br>";
    }
}
$hero = new person();
$hero->getEquipment();

其他

  • 解决不同的trait方法名冲突
  1. 覆盖

使用 insteadof

  1. 别名

使用 as

class person
{
    use coat{
        coat::getName as getCodeName;
    }

    use pants{
        pants::getName insteadof  coat;
    }

    public function getEquipment()
    {
        $this->getCodeName("上衣");
        $this->getName("裤子");
    }
}

trait coat
{
    public function getName($name)
    {
        echo "</br>装备名称:" . $name;
    }

    public function getCoat()
    {
        echo "装备上衣</br>";
    }
}

trait pants
{
    public function getName($name)
    {
        echo "</br>装备名称:" . $name;
    }

    public function getPants()
    {
        echo "装备裤子</br>";
    }
}

$hero = new person();
$hero->getEquipment();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spydxk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值