PHP之Trait详解

Trait是什么

Trait是在一种代码复用技术,是因为php单继承引入的。

  • Trait如何使用
<?php

trait A
{
    public $name = 'a';

    public function getName()
    {
        echo "This is a ";
    }
}

class B
{
    use A;
}

$obj = new B();
$obj->getName();


  • Trait中的方法会覆盖基类中的同名方法,而本类会覆盖Trait中同名方法
<?php

trait A
{
    public $name = 'a';

    public function getName()
    {
        echo "This is a ";
    }

    public function getSex()
    {
        echo "性别:未知 ";
    }
}

class B
{
    public function getName()
    {
        echo "This is b ";
    }

    public function getSex()
    {
        echo "性别:女 ";
    }
}

class C extends B
{
    use A;

    public function getSex()
    {
        echo "性别:男 ";
    }
}

$obj = new C();

$obj->getName();
$obj->getSex();


  • 当trait定义了属性后,类就不能定义同样名称的属性,否则会产生 fatal error,除非是设置成相同可见度、相同默认值。不过在php7之前,即使这样设置,还是会产生E_STRICT 的提醒
  • 一个类可以组合多个Trait可以通过逗号分隔 use trait1,trait2
  • 当不同的trait中,却有着同名的方法或属性,会产生冲突,可以使用insteadof或 as进行解决,insteadof 是进行替代,而as是给它取别名
  • as 还可以修改方法的访问控制
鲁ICP备16017569号-2