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

发布时间:2021-09-13 18:10:35 作者:chen
来源:亿速云 阅读:128

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

玩转PHP中的抽象类与接口

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

抽象类定义

抽象类的特点:

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);

接口定义

接口的特点:

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中的抽象类与接口的定义”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. PHP抽象类与接口的区别
  2. Python中的接口类与抽象类

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:如何保持MySQL和Redis中的数据一致

下一篇:如何使用php foreach修改值

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》