interface数据类型php,接口(interface)

PHP是单继承语言,因此一个类不能同时继承多个类。当一个类需要多个类的功能时,除了使用trait关键字,还可以使用接口技术。

如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有成员都是public权限的,那么这种特殊的抽象类就是接口。

**应用场景:**

* 保持规范、统一性

* 多个类需要实现同样的方法,只是实现方式不一样

**接口使用规范:**

* 接口不能实例化

* 接口属性必须是常量

* 接口方法必须是public,且不能有函数体

* 类必须实现接口的所有方法

* 一个类可以同时实现多个接口,用逗号隔开

* 接口可以继承接口,使用extends关键字。

* 接口使用关键字interface来定义,使用implements关键字来实现

* 类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误.

* 实现多个接口时,接口中的方法不能有重名。

```

//定义接口

interface User{

function getDiscount();

function getUserType();

}

//VIP用户 接口实现

class VipUser implements User{

// VIP 用户折扣系数

private $discount = 0.8;

function getDiscount() {

return $this->discount;

}

function getUserType() {

return "VIP用户";

}

}

class Goods{

var $price = 100;

var $vc;

//定义 User 接口类型参数,这时并不知道是什么用户

function run(User $vc){

$this->vc = $vc;

$discount = $this->vc->getDiscount();

$usertype = $this->vc->getUserType();

echo $usertype."商品价格:".$this->price*$discount;

}

}

$display = new Goods();

$display ->run(new VipUser); // VIP用户商品价格:80 元

?>

```

**抽象类和接口的区别:**

* 接口是特殊的抽象类,接口使用关键字implements,抽象类使用extends。

* 接口只能声明常量,抽象类可以声明变量。

* 接口没有构造函数,抽象类可以有。

* 一个类可以继承多个接口,只能继承一个抽象类

* 子类使用implements来实现接口则需要实现接口中所有方法;如果子类继承抽象类,只需要实现需要的方法

* 接口中的方法必须是public,抽象类中的方法可以用public,protected,private

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值