- Trait (PHP5.4+)
Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中。
其作用有两个:表明类可以做什么;提供模块化实现。
Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制
class biology{
public $name;
public function __construct($name)
{
$this->name = $name;
}
public function eat() {
echo "Biology can eat"."<br>";
}
}
trait all_common{
function walk() {
echo "$this->name can walk"."<br>";
}
/**
* 覆盖父类继承的eat方法
*/
function eat() {
echo "$this->name can eat"."<br>";
}
}
trait animal_common{
function speak() {
echo "$this->name can speak"."<br>";
}
}
trait bird_common{
function fly() {
echo "$this->name can fly"."<br>";
}
}
class people extends biology {
use all_common;
use animal_common;
public function __construct($name)
{
parent::__construct($name);
}
public function smart() {
echo "$this->name am very smarty"."<br>";
}
}
class eagle extends biology {
use all_common;
use bird_common;
public function __construct($name)
{
parent::__construct($name);
}
public function wing() {
echo "$this->name have wings"."<br>";
}
/**
* 覆盖trait中的eat方法
*/
public function eat() {
echo "I am a $this->name, I can eat"."<br>";
}
}
$p = new people("People");
$b = new eagle("Eagle");
$p->walk();
$b->walk();
$p->speak();
$b->fly();
$p->smart();
$b->wing();
$p->eat();
$b->eat();
- Trait的优先级
自身定义的方法>Trait的方法>父类继承的方法
优先级高的,会覆盖优先级低的方法
use多个Trait中不能含有同名方法
网友评论