2014-09-20 205 views
1

我有以下程序为抽象方法声明抽象类是否强制?

<?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

是的,如果它包含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文件)做一些处理,知道它将是一个数组。

相关问题