Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:trait就像是一个游离在外的孤儿, 希望被主人收留 , 这个主人可以类或抽象类,或更大的trait
insteadof
替换as
改名
as
高级用法修改访问控制
<?php
trait trait1
{
public function eat()
{
echo '朱老师是一个吃货吗?';
}
}
trait trait2
{
public function eat()
{
echo '朱老师不是吃货';
}
}
class Nicola
{
use trait1,trait2
{
trait1::eat insteadof trait2;
trait2::eat as eaten;
}
}
as
高级用法,可以修改 trait 中成员的访问控制
<?php
//trait
trait trait1
{
public function eat()
{
echo '朱老师是一个吃货吗?';
}
}
trait trait2
{
public function eat()
{
echo '朱老师不是吃货';
}
}
class Nicola
{
//修改访问权限
// use trait1 {eat as protected;}
//修改别名
use trait1 {
eat as eat1;
}
}
$nicola = new Nicola;
echo $nicola->eat();
echo '<hr>';
echo $nicola->eat1();
<?php
//trait和接口的组合
//年终奖抽奖
$prices = ['单车', '摩托', '宝马', '法拉利', '直升机', '战斗机'];
// 接口
interface iKey
{
// 随机抽奖
public static function generateId(int $min, int $max): int;
}
// trait: 真实实现目的
trait tCreateId
{
public static function generateId(int $min, int $max): int
{
return mt_rand($min, $max);
}
}
// 工作类
class DrawPrize implements iKey
{
use tCreateId;
public static function choujiang(array $prices, int $id)
{
return $prices[$id];
}
}
//员工开始抽奖
$id = DrawPrize::generateId(0, 5);
$price = DrawPrize::choujiang($prices, $id);
printf('恭喜你!你的年终奖品是: <span style="color:red">%s</span>', $price);
Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。