接口类
接口中只允许声明两类成员:类常量,公工抽象方法
- 语法
interface iDemo
{
//接口常量
const APP_NAME='商城';
//公共抽象方法,没有实现过程
public static function d(...$args):string;
//构造方法
public function __construct(...$args);
}
- 接口的实现类
接口不能实例化使用必须创建一个实现类,在实现类中必须将接口中声明的抽象方法全部实现了
尽可能直接用接口来访问类常量class Demo1 implements iDemo
{
public static function d(...$args):string
{
return print_r($args,true);
}
public function __construct(...$args){
return $args;
}
}
$obj=new Demo1();
echo Demo1::APP_NAME,'<br>';
echo iDemo::APP_NAME,'<br>';
echo $obj->d('a','b'),'<br>';
echo Demo1::d('a','b'),'<br>';
小练习
//定义一个接口类
interface iPeople
{
public static function eat():string;
public static function run():string;
public static function cry():string;
}
class Ren implements iPeople
{
public static function eat():string
{
return '吃';
}
public static function run():string
{
return '跑步';
}
public static function cry():string{
return '哭';
}
}
$obj=new Ren();
echo $obj->eat();
echo $obj->run();
echo $obj->cry();
抽象类
接口:毛坯房,只有一些基本的框架,只是描述每个房间的基本功能
抽象类: 实现了部分功能,大部分没有实现,有抽象方法,也有具体实现方法
实现类:实现了接口和抽象类的抽象方法的”工作类“.
abstract class Model
{
public function find()
{
}
public function select()
{
}
//抽象方法
abstract public function __construct();
}
class UserModel extends Model
{
//抽象类必须通过它的子类才可以使用
//抽象类的实现类(子类)必须将抽象类的抽象方法实现了
public function __construct()
{
}
}
如果抽象类抽象方法多就用接口类,必须通过抽象类实现的方法用trait实现,推荐面向接口编程