购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.12 抽象类

抽象类和接口几乎相同,只不过方法体里可以包含函数体内容。抽象类必须是“extended——扩展”,而不是“implements——实现”。因此,如果扩展类一些方法都需要完成,那么你可以定义一个抽象类。我们来看代码清单2-18:

代码清单2-18 生成HTML报表的抽象类


<php
//abstract.reportgenerator.php
abstract class ReportGenerator{            //声明为抽象类
    public function generateReport$resultArray{
        //生成HTML报表
    }
}>

在上面的抽象类中,有一个名为generateReport的方法,它接收一个多维数组作为参数,然后生成一个HTML报表。

那为什么我们声明一个抽象类?因为后面会用到一个通用DBDriver,它不会影响代码,因为它正在作为一个参数,而不是任何相关的数据库本身只有一个数组。现在我们用这个MySQLDriver的抽象类,如代码清单2-19所示:

代码清单2-19 使用抽象类并实现MySQLDriver的方法


<php
include"interface.dbdriver.php");  //引入dbdriver接口
include"abstract.reportgenerator.php"); //引用HTML报表抽象类
class MySQLDriver extends ReportGenerator implements DBDriver {
    public function connect() {
        //连接数据库
    }
     public function execute$query {
        //执行SQL查询并返回
    }
}>

大家可能注意到,MySQLDriver扩展了ReportGenerator抽象类并实现了DBDriver接口。

我们可以使用抽象类,并全部实现上面的例子所示的接口。

类似声明抽象类,你还可以声明抽象方法。当一个方法声明为抽象时,意味着子类必须重写该方法。

一个抽象的方法不包含任何内容。抽象方法的声明如下所示: sHXNDiYsZf4Zs9rtF7R4brZHFsCcOPHG38dS1oapmMgUKv/ZZ0yLplssDavrDP1h


abstract public function connectDB();
  

点击中间区域
呼出菜单
上一章
目录
下一章
×