2010-05-07 129 views
4

我正在研究一個簡單的抽象數據庫類。在我使用這個類時,我想讓某個實例成爲一個單例。我在想有抽象類,它是一個單身的,然後將其延伸到另一個抽象類,單身。這可能嗎?推薦的?抽象類在PHP中擴展抽象類?


編輯:我想有兩個幾乎相同的摘要,除了一個是單身。所以唯一的區別是一個人會擁有另一個人的所有功能,但是會有其他的特性和方法,使其表現得像一個單身人士。

我想有這一個基類的代碼庫,以便我做出改變,我沒有讓兩個文件同步。

回答

3

在我做事情的方式,我相信有一個抽象的單都沒用。這是因爲,你想成爲一個單獨什麼

1)是您實例的應用程序中使用它是否會成爲一個庫,模型,控制器或視圖,而不是抽象的最後一節課。

2)添加單方法容易,並且可以在8行寫入。見下文。

protected static $_instance; 
public static function getInstance() 
{ 
    if (!isset(self::$_instance)) { 
     self::$_instance = new self(); 
    } 
    self::$_instance; 
} 

3)PHP 5.3以下版本不支持後期靜態綁定。這將導致實例化抽象類而不是繼承它的最終類,並且不會像預期的那樣起作用,正如Gordon和nuqqsa已經提到的那樣。所以,爲了向後兼容,最好避免它。

1

Singleton模式的實施必須滿足兩個要求:

  1. 它必須提供一個機制來訪問的單例類的實例,而無需創建一個類的對象
  2. 必須堅持單身對象,以便它是沒有實例化超過一次

只要提供了它,變化就是多重的。如果這是您需要的,將類抽象從另一個抽象擴展出來是沒有問題的。但是,正如@Gordon說,要知道,重寫靜態方法/屬性導致PHP < 5.3奇特的行爲。