什么是PHP接口?
在PHP中,接口是一种特殊的抽象类,它定义了一个契约,规定实现类必须遵循的方法。与抽象类不同,接口中的所有方法都是抽象的(PHP 8.0后允许存在默认方法实现)。
接口既然是特殊的抽象类,那就有特殊的写法,接口和抽象类的区别主要体现在:
1. 接口不同于抽象类通过"abstract class"来声明,而是通过关键字“interface”来声明。
2. 接口要求所有方法都具有public公共属性(PHP8.1后允许接口中包含私有方法作为实现细节),抽象类可以存在protected受保护属性。
3. 接口的方法不需要跟抽象类的抽象方法一样通过abstract来修饰。
比如一台电脑,会有usb接口、耳机接口、显示器接口等,我们可以通过PHP这样描述:
<?php
/* 接口-interface */
interface Computer
{
public function usb();//usb接口
public function ear();//耳机接口
public function screen();//显示屏接口
}
?>既然有接口了,那么我们该如何实现接口呢?
我们可以通过关键字implements来实现接口。比如我们有一个dotcpp品牌的电脑,我们可以这样实现接口:
<?php
/* 接口-interface */
interface Computer
{
public function usb();//usb接口
public function ear();//耳机接口
public function screen();//显示屏接口
}
class dotcpp implements Computer
{
public function usb()
{
echo "dotcpp版本的usb接口";
}//usb接口
public function ear()
{
echo "dotcpp版本的耳机接口";
}//耳机接口
public function screen()
{
echo "dotcpp版本的显示屏接口";
}//显示屏接口
}
?>接口原来是这样啊,那么接口有什么用呢?
我们都知道MySQL 是一款简单易用、性能优秀的开源关系型数据库,以"快速读取"著称;而 PostgreSQL 则是一个功能更强大、更符合SQL标准的关系型数据库,以"功能丰富"和"数据完整性"著称。我们可以通过一个接口,来兼容不同的数据库:
<?php
/* 1. 创建一个数据库接口 */
interface Database {
public function connect();
public function query($sql);
public function disconnect();
}
/* 使用接口 */
class Mysql implements Database {
public function connect() {
echo "连接Mysql数据库<br>";
}
public function query($sql) {
echo "执行Mysql查询: $sql<br>";
}
public function disconnect() {
echo "断开Mysql连接<br>";
}
}
class Postgresql implements Database {
public function connect() {
echo "连接PostgreSQL数据库<br>";
}
public function query($sql) {
echo "执行PostgreSQL查询: $sql<br>";
}
public function disconnect() {
echo "断开PostgreSQL连接<br>";
}
}
// 可以轻松切换数据库
function processData(Database $db) {
$db->connect();
$db->query("SELECT * FROM users");
$db->disconnect();
}
processData(new Mysql());
processData(new Postgresql());
?>总结:在PHP中,接口是面向对象编程中的"契约"和"规范",它定义了类必须实现的方法集合,实现了完全的抽象,使得代码具有高度的抽象性和可扩展性。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程