background image

php 面向对象开发实例:抽象类与继承

首先,让我们先来回顾一下 php 中对于抽象类的介绍:
PHP5 支持抽象类和抽象方法。抽象类不能直接被实例化,你必须先继承该抽象类,然后

 

再实例化子类。抽象类中 至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其
中就不能包括具体的功能实现。
继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可

 

见性 必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为
protected,那么子类中实现的方法就应该声明为 protected 或者 public

 

,而不 能定义

为 private  

然后,我们回顾一下在 初学者如何学习 php

的具体技术 一文中站长所介绍的开发方式。

我所提到的是:架构师负责定义抽象类并实现类与类之间访问与传递、核心程序员负责实
现抽象类中定义的具体方法即代码封装、底层程序员负责具体的业务逻辑并调用由核心程
序员封装的代码来实现具体功能。
第三步,我们假设,现在我们的开发团队由 3

人组成:架构师 赵,核心程序员 钱,底

层程序员 孙。按照上面的分工,架构师 赵先来定义抽象类。经过若干天的冥思苦想,我

们的赵工程师终于定义出了如下的一个抽象类 命名为 abstract.class.php:
<?php
abstract class AbstractClass
{
    //子类中由核心程序实现这些方法

   abstract protected function getValue();
    abstract public function outputValue();
}
?>
由于是个简单例子,只能委屈一下赵工了,当然我们知道经验丰富的赵工肯定不会只定
义如此简单的抽象类。
在一系列的抽象类定义完成后,赵工和项目经理制订出了一个完整的开发文档,其中明
确告知了我们的核心程序员,抽象类(实际开发中不止一个)中有多少
方法要实现,以及在子类中使用什么限定符来声明这些方法;文档还告诉我们的底层程
序员,他可以从核心类中调用哪些方法。
ok,现在,架构师的工作完成了,接下来就是核心程序员--钱工,底层程序员--孙工的工
作了。
核心程序员,从开发文档中得知了自己需要如何去继承抽象类并且实现其中的方法(当
然实际开发中会有多个子类,这里举例只举一个)。
钱工需要定义一个核心类 lib,该类继承 AbstractClass,根据文档,我们将其命名为
lib.class.php,代码如下:
<?php
include 'abstract.class.php';
class lib extends AbstractClass{