2012-04-10 57 views
2

我已經實現了兩個類isbn10和isbn13。我想創建一個類ISBN,這樣實例化時,我會得到ISBN10類型或網路書店的目的,根據給予ISBN類的構造函數的參數:從父類中實例化正確的子類

$isbn_code = new isbn('978-3-16-148410-0'); 

我知道我可以做這樣的事情有一個靜態方法:

class isbn { 
    public static function new($isbn) { 
     if (preg_match('/' . isbn13::isbn_regex . '/', $isbn)) { 
      return new isbn13($isbn); 
     } else if (preg_match('/' . isbn10::isbn_regex . '/', $isbn)) { 
      return new isbn10($isbn); 
     } else { 
      throw new Exception("Invalid ISBN code", 1); 
     } 
    } 

} 

$isbn_code = isbn::new('978-3-16-148410-0'); 

然而這是可能的實例化類ISBN並自動獲得ISBN13對象(或ISBN10)?

回答

1

不可以。使用靜態「工廠」方法(如您所描述的)是正確執行此操作的方法。在強類型語言中,這可以更好地處理,但不能在PHP中處理。這是因爲構造函數不返回對象,他們只是創建它。

+0

謝謝,我有一種感覺無法完成,我認爲最好的解決方案是實現一個isbn類。 – moray 2012-04-11 11:27:24