php7实践指南-ch9类与方法-抽象类和接口

9.5 抽象类和接口

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

9.5.1 抽象类

创建一个抽象类可使用关键词abstract,语法格式如下:

创建一个抽象类可使用关键词abstract

abstract class class_name{
    abstract public function  func_name1($arg1,$arg2);
    abstract public function  func_name2($arg1,$arg2,$arg3);
}

一个抽象类必须至少包含一个抽象方法,抽象类中的方法不能被定义为私有的(private),因为抽象类中的方法需要被子类覆盖,同样抽象类中的方法也不能用final修饰,因为其需要被子类继承。抽象类中的抽象方法不包含方法实体。如果一个类中包含了一个抽象方法,那么这个类也必须声明为抽象类。

比如我们定义一个数据库抽象类,有很多种数据库,比如MySQL、Oracle、MSSQL等,虽然每种数据库都有不同的使用方法,但是对于数据库来说都有一些共同的操作部分,比如建立数据库链接、查询数据、关闭数据库链接等。这样我们就能抽象出可适用于不同数据库操作的抽象基类。如下示例定义一个抽象Database类:

 

<?php
abstract class database{
    abstract function connect($host,$username,$pwd,$db);
    abstract function query($sql);
    abstract function fetch();
    abstract function close();
    function test(){
        echo 'test';
    }
}

下面定义一个MySQL类继承自抽象基类Database。

class mysql extends database{
    protected $conn;
    protected $query;
    function connect($host, $username, $pwd, $db)
    {
        $this->conn=new mysqli($host,$username,$pwd,$db);
    }
    function query($sql)
    {
        // TODO: Implement query() method.
        return $this->conn->query($sql);
    }
    function fetch()
    {
        // TODO: Implement fetch() method.
        return $this->conn->fetch();
    }

    function close()
    {
        // TODO: Implement close() method.
        $this->conn->close();
    }
}

抽象类中的抽象方法必须被子类实现(除非该抽象类的子类也为抽象类),否则会报错;抽象类中的非抽象方法可不被子类实现(如示例中的test()方法)。非抽象方法必须包含实体,抽象方法不能包含实体。

9.5.2 接口

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

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

接口中所有的方法都必须被子类实现

与抽象类不同的是,一个子类可继承自多个接口

类继承多个接口,多个接口之间用“, ”分开,类要实现其继承的所有接口的全部方法。

除了类可以继承接口外,接口也可以继承接口。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tjjingpan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值