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 还可以修改方法的访问控制