Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:你可能发现了, trait, 抽象类, 接口, 都是要把工作类中与用户关联不大,或用户不必关心的部分抽出来放在其它地方实现, 这样用户就更专注自己的业务了, 明白这点就算是真正理解了这些技术的良苦用心
<?php
// trait组合使用方法
// 把多个trait引用到一个trait中,然后在工作类中只需引用一个trait就可以了
// trait1
trait tOne
{
public function one()
{
return __TRAIT__;
}
}
// trait2
trait tTwo
{
public function two()
{
return __FUNCTION__;
}
}
// trait3
trait tThree
{
public function three()
{
return __CLASS__;
}
}
// 3个trait的集合
trait tGather
{
use tOne,tTwo,tThree;
}
// 工作类
class Dd
{
// 引用trait的集合 ,就能调用三个trait中成员
use tGather;
}
$a = new Dd;
echo $a->three();
echo '<hr>';
echo $a->two();
echo '<hr>';
echo $a->one();
echo '<hr>';
// trait组合中的方法命名冲突解决方法
// 替换
// trait1
trait tFout
{
public function one()
{
return __TRAIT__;
}
}
// trait2
trait tFive
{
public function one()
{
return __FUNCTION__;
}
}
// 2个trait的集合
trait tGather1
{
// 语法
use tFout,tFive{
// 替换:关键字:insteadOf
tFout::one insteadOf tFive;
// 别名:关键字:as
tFout::one as fu;
}
// 访问控制符:关键字:as
// 语法
use tFout {one as protected one1;}
}
// 工作类
class Db
{
use tGather1;
}
$b = new Db;
echo $b->one();
echo '<hr>';
echo $b->fu();
echo '<hr>';
// trait,接口,抽象类联合编程
// 接口定义方法
// trait实现接口中的抽象方法,打包在一起以供调用
// 接口:定义抽象方法
interface iA
{
public function bag();
public function dag();
}
// trait:实现方法
// trait可以只实现接口中一个方法
trait tB
{
public function bag()
{
return __METHOD__;
}
}
// 工作类:调用trait
// 可以在其他类中调用trait,实现代码复用
class C
{
use Tb;
}
$l = new C;
echo $l->bag();