php 接口 interface,PHP interface接口

本文介绍了PHP中的接口和抽象类的概念,强调它们作为公共基类的作用。示例展示了如何定义和实现接口,包括单继承和多继承。在PHP中,一个类可以继承多个接口但只能继承一个抽象类,接口之间可以多重继承。示例代码解释了如何在MySQL类中实现Database和MysqlAdmin接口,并详细说明了接口继承和方法实现的要求。
摘要由CSDN通过智能技术生成

抽象类和接口都是不能被实例化的特殊类,可以在抽象类和接口中保留公共的方法,将抽象类和接口作为公共的基类。

在 PHP 中,子类只能继承自一个抽象类,却可以继承自多个接口。接口实现了 PHP 的多重继承,声明一个接口的关键词是 interface。

紧接上节《PHP抽象类》中的代码,我们也可以将 Database 定义为接口。示例代码如下:

interface Database { function connect($host,$username,$pwd,$db); function query($sql); function fetch(); function close(); function test(); }

同样,接口是需要被继承的,所以接口中定义的方法不能为私有方法或被 final 修饰。接口中定义的方法必须被子类实现,并且不能包含实体。

下面定义一个 MySQL 类继承自接口 Database,代码如下:

class mysql implements Database { protected $conn; protected $query; function connect($host,$username,$pwd,$db){ $this->conn = new mysqli($host,$username,$pwd,$db); } function query($sql){ return $this->conn->query($sql); } function fetch(){ return $this->query->fetch(); } function close(){ $this->conn->close(); } function test(){ echo 'test'; } }

在本例的接口示例中,接口中所有的方法都必须被子类实现,所以本例中子类 MySQL 要实现接口中定义的 test() 方法。

与抽象类不同的是,一个子类可继承自多个接口,如我们再定义一个接口 MysqlAdmin,代码如下:

interface MysqlAdmin{ function import(); function export(); }

这时我们实现 MySQL 类继承自接口 Database 和 MysqlAdmin,代码如下:

class mysql implements Database, MysqlAdmin { protected $conn; protected $query; function import(){ $sql = " load data local infile '/data/import.txt' into table table_name;"; $this->conn->query($sql); } function export(){ $sql = "select * from table_name into outfile 'export.txt'"; $this->conn->query($sql); } function connect($host,$username,$pwd,$db){ $this->conn = new mysqli($host,$username,$pwd,$db); } function query($sql){ return $this->conn->query($sql); } function fetch(){ return $this->query->fetch(); } function close(){ $this->conn->close(); } function test(){ echo 'test'; } }

类继承多个接口,多个接口之间用,分开,类要实现其继承的所有接口的全部方法。本例中 MySQL 类必须实现 Database 和 MysqlAdmin 这两个接口的全部方法。

除了类可以继承接口外,接口也可以继承接口。改写上面的例子,让 Database 接口继承自 MysqlAdmin 接口,代码如下:

interface MysqlAdmin{ function import(); function export(); } interface Database extends MysqlAdmin{ function connect($host,$username,$pwd,$db); function query($sql); function fetch(); function close(); function test(); }

同样,一个接口也可继承自多个接口。这样我们在定义一个继承自 Database 接口的 MySQL 类时,也要实现 Database 接口继承的父接口中的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值