千家信息网

PHP中的抽象类与接口的定义

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"PHP中的抽象类与接口的定义",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"PHP中的抽象类与接口的定义"吧!玩转PHP中的抽象类与接口在
千家信息网最后更新 2026年11月02日PHP中的抽象类与接口的定义

本篇内容主要讲解"PHP中的抽象类与接口的定义",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"PHP中的抽象类与接口的定义"吧!

玩转PHP中的抽象类与接口

在面向对象开发中,特别是使用现代化框架的过程中,我们经常会和接口、抽象类打交道。特别是我们自己尝试去封装一些功能时,接口和抽象类往往会是我们开始的第一步,但你真的了解它们吗?

抽象类定义

抽象类的特点:

  • 顾名思义,它是抽象的,当然也就是不能被实例化的。所以,抽象类一般是作为我们的基类来进行定义的。

  • 在一个类中,只要有一个方法被定义为抽象的,那么这个类就必须加上abstract关键字成为抽象类。

  • 被定义为抽象的方法只声明其调用方式,不能定义其具体的功能实现。

  • 子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类一致或者更为宽松。

  • 方法的调用方式必须匹配,即类型和所需参数数量必须一致。子类实现的抽象方法可以增加参数但必须有默认值。

abstract class A {    public function show(){        $this->getName();        echo PHP_EOL;    }    protected abstract function getName();    public abstract function getAge($age);}class ChildA1 extends A {    public function getName(){        echo "I'm ChildA1";    }    public function getAge($age){        echo "Age is " . $age;    }}class ChildA2 extends A {    protected function getName(){        echo "I'm ChildA2";    }    public function getAge($age, $year = ''){        echo "Age is ". $age . ', bron ' . $year;    }}$ca1 = new ChildA1();$ca1->show();$ca1->getAge(18);$ca2 = new ChildA2();$ca2->show();$ca2->getAge(20, 2000);

接口定义

接口的特点:

  • 可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

  • 就像定义一个标准的类一样,但其中定义所有的方法都是空的。

  • 接口中定义的所有方法都必须是公有,这是接口的特性。

  • 类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

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

  • 接口也可以继承,通过使用 extends 操作符

  • 接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖

interface B1 {    const B1_NAME = 'Interface B1';    function getName();    function getAge($age);}interface B2 extends B1 {    function show();}interface B3 {    function getSchool();}class ChildB implements B2, B3{    function getName(){        echo "I'm ChildB";    }    function getAge($age, $year = ''){        echo "Age is " . $age;    }    function show(){        $this->getName();        echo PHP_EOL;        $this->getAge(23, 1997);        echo PHP_EOL;        echo self::B1_NAME;        echo PHP_EOL;    }        function getSchool(){        echo "study in Peking University";        echo PHP_EOL;    }}$b = new ChildB();$b->show();$b->getSchool();

抽象类和接口的区别

从上面我们可以总结出一些抽象类和接口的区别:

  • 抽象类的子类遵循继承原则,只能有一个父类;但一个类可以实现多个接口

  • 抽象类中可以有非抽象的已经实现的方法;接口中全是抽象的方法,都是方法定义

  • 抽象类中方法和变量的访问控制自己定义;接口中只能是公共的

那么问题来了,这两货哪个好?抱歉,这个问题可没有答案,它们的作用不同。抽象类可以作为基类,为子类提供公共方法,并定制公共的抽象让子类来实现。而接口则是更高层次的抽象,它可以让我们依赖于抽象而不是具体的实现,为软件开发带来更多的扩展性。

面向接口开发

接口,实际上也可以看做是一种契约。我们经常会拿电脑主机箱后面的插口来说明。比如USB接口,我们定义了它的大小,里面的线路格式,不管你插进来的是什么,我们都可以连通。而具体的实现则是取决于电脑软件对插入的硬件的解释,比如U盘就会去读取它里面的内容,而键盘则会识别为一个外设。

从这里可以看出,接口能够为我们程序的扩展提供非常强大的支撑。任何面向对象语言中接口都是非常重要的特性。下面我们来用接口模拟刚刚说的USB插口。

interface USB{    function run();}class Keyboard implements USB{    function run(){        echo "这是键盘";    }}class UDisk implements USB{    function run(){        echo "这是U盘";    }}

这么写有什么好处呢?我们再深入一个概念:依赖注入。如果使用面向接口开发的话:

function testUSB (USB $u){    $u->run();}// 插入U盘testUSB(new UDisk);// 插入键盘testUSB(new Keyboard);

testUSB方法中的$u并不是某个具体实例,只是USB接口的抽象,在不知道它是什么实例的情况下我们通过接口契约,保证它一定会有一个run()方法。而具体的实现,则是在外部我们调用方法的时候注入进来的。

到此,相信大家对"PHP中的抽象类与接口的定义"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

接口 方法 子类 内容 开发 一致 多个 常量 方式 这是 键盘 功能 参数 契约 实例 实际 对象 常会 插口 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 涨乐互联网科技 新华互联网科技学院 中资互联网科技 互联网科技公司官网 美国互联网黑科技 时间互联网络科技 大白互联网科技 互联网科技公司需要的职位 茂名市互联网科技产业园 湖南诚度互联网科技有限公司 全球顶尖互联网科技公司 世界互联网科技公司市值排名 消费医药和互联网科技 呼和浩特新华互联网科技学院 开一家科技互联网公司需要多少钱 如何创新互联网科技 领航科技大厦互联网公司 浙南科技城互联网大厦招聘 下一代互联网重大应用科技园 东风日产互联网科技公司叫什么 互联网科技公司 新华互联网科技学院 大白互联网科技 金融科技与互联网金融相同和不同 南山科技园互联网公司有哪些 来此购互联网科技有限公司 米聚互联网科技南京有限公司排面 迪庆互联网科技招生 云南省自由互联网科技有限公司 科技互联网公司两年变化
0