2013-04-27 111 views
1

我想在php中製作這樣的東西: 我想讓父類名爲「item」,並且有一堆兒童類,比如「劍」,「護甲」等。 我可以簡單地叫:php - 由父母和孩子構建

$some_sword = new sword($id) ; 

但我也想做某事像這樣:

$some_sword = new item("sword",$id) ; 

而且我想這兩個代碼做他同樣的效果。 $ some_sword在兩種方式中必須是相同的類!

回答

3

new關鍵字將始終返回相關類的實例。但是,您可以在父級使用靜態方法來返回子類對象(或任何對象)。

class Item 
{ 
    public function __construct($id) 
    { 
     //Whatever 
    } 

    /** 
    * Gets the object requested and passes the ID 
    * 
    * @param string object to return 
    * @param integer id 
    * @return object 
    */ 
    public static function get($itemtype, $id) 
    { 
     $classname = ucfirst($itemtype); 
     return new $classname($id); 
    } 
} 

class Sword extends Item 
{ 
    public function __construct($id) 
    { 
     //Whatever 
    } 
} 

class Armor extends Item 
{ 
    public function __construct($id) 
    { 
     //Whatever 
    } 
} 

// Client Code 
$some_sword = Item::get('sword', 1); 
$some_armor = Item::get('armor', 2); 
+0

編輯以修復get方法錯誤(!我之前,我將它張貼真的應該測試我的代碼) – 2013-04-27 17:44:37

+0

謝謝,這似乎是不夠的適用:d – 2013-04-28 01:31:46

+0

你覺得你可能使它的接受回答?這將意味着很多:) – 2013-04-29 10:40:16