2014-09-20 109 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文件)做一些處理,知道它將是一個數組。

相關問題