Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:是不是被这些术语搞伤了, 其实本质上还是类, 只是应用场合不同罢了
<?php
// 接口关键字:interface
interface ischool
{
const NAMES ='湖畔大学';
const PRINCIPAL ='马云';
const STUDENT1 ='柳传志';
const STUDENT2 ='冯仑';
public static function names();
public static function principal();
public static function student1();
public static function student2();
}
// 利用抽象类实现接口中一种方法
abstract class Dd implements ischool
{
public static function names()
{
return ischool::NAMES;
}
}
// 利用工作类实现剩下的方法
class Db extends Dd
{
public static function principal()
{
return ischool::PRINCIPAL;
}
public static function student1()
{
return ischool::STUDENT1;
}
public static function student2()
{
return ischool::STUDENT2;
}
}
echo(new Db)::PRINCIPAL;
echo '<hr>';
echo(new Db)::STUDENT1;
echo '<hr>';
echo(new Db)::STUDENT2;
echo '<hr>';
// 接口多继承
interface Da
{
const NAME = '王老师';
}
interface Df
{
const SUBJECT = '语文';
}
interface Dc
{
const TIME = '上午';
public function pec();
}
class iDj implements Da , Df , Dc
{
public function pec()
{
return Da::NAME . '教的科目是' . Df::SUBJECT . '时间是' . Dc::TIME;
}
}
echo (new iDj)->pec();
// trait:与抽象类,接口一样不能实例化, 只能嵌入到宿主类中使用
// trait成员:常规成员,静态成员,抽象成员,不能使用类常量
// trait功能:代码复用
trait tOne
{
public $doc = 12;
public static $nmu = 15;
abstract public function lop();
}
class Li
{
// 关键字:use
use tOne; //加载trait tOne,在其他类中也可以加载这个trait,实现代码复用
public function lop()
{
return $this->doc;
}
}
echo (new Li)->lop();