是否必须为抽象方法声明抽象类?

时间:2014-09-20 07:51:36

标签: php oop

我有以下程序

<?php
abstract class foo
{
    abstract public function callme();
    public function testing()
    {
        return $this->callme();
    }
}
class bar extends foo
{
    public function callme()
    {
        return "hello";
    }   
}

$objBar = new bar();
echo $objBar->testing();

?>

我定义了abstract class foo。是否必须在课前写摘要?因为如果我删除了抽象,我会收到致命的错误。

1 个答案:

答案 0 :(得分:1)

是的,如果它包含abstract方法。

通过将方法声明为抽象,您说要使用此类,扩展类必须实现抽象方法。

除非实现callme,否则无法实例化您的foo类,因此必须将其声明为抽象。


使用真实世界的示例可能比标准abstract class Vehicleclass Car extends Vehicle教程更好地解释这些概念。

我们假设我们有一个报告系统可以对数据库进行一些查询。

我们发现所有报告必须以标准方式实施,以共享代码并帮助进行日常维护。

所以我们定义:

abstract class Report 
{

}

为了论证,我们所有的报告都需要数据库连接。

abstract class Report 
{
    /** @var PDO */
    protected $dbh;

    public function __construct (PDO $dbh) 
    {
         $this->dbh = $dbh;
    }  

    /**
     * @return array
     */
    abstract public function getData();

}

这里我们还决定所有报告都必须实现一个返回数组的公共getData方法。

这意味着:

  • 我们可以确保所有报告都有数据库连接
  • 我们可以以相同的方式实例化然后运行每个报告

抽象类定义强制执行我们使用此代码的方式,并确保每种类型的报表,无论您的团队中的哪个开发人员编写它,都符合我们已经决定的约定。

然后,其他代码可以从用户输入中选择一个报告,运行它,并使用getData的结果执行某些操作(例如将其写入CSV文件),因为它知道它将是一个数组。