利用抽象类实现接口中一种方法
<?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功能:代码复用
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();
总结
- 1.接口的成员只能是“抽象方法”和“常量”
- 2.接口间接实现了多继承
- 3.接口实现了多态
- 4.接口本质上就是类的模板
- 5.trait的基本功能,代码复用
- 6.类和接口是不同的:类里是有程序实现的;而接口无程序实现,只可以预定义方法