2013-04-27 1 views
1

저는 PHP에서 그런 것을 만들고 싶습니다. "아이템"이라는 이름의 부모 클래스와 "검", "갑옷"과 같은 자식 클래스의 묶음을 갖고 싶습니다. php - 부모와 자식 모두에 의해 구성하십시오.

$some_sword = new sword($id) ; 

을하지만이 같은 STH하고 싶지 : 나는 단순히 호출 할 수 있습니다

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

그리고이 두 코드는 그 같은 효과를 수행합니다. $ some_sword는 두 가지 방법으로 같은 클래스 여야합니다!

답변

3

새 키워드는 항상 해당 클래스의 인스턴스를 반환합니다. 그러나 부모 클래스에서 정적 메서드를 사용하여 자식 클래스 개체 (또는 해당 개체에 대한 개체)를 반환 할 수 있습니다.

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

편집이 (! 내가 그것을 게시하기 전에 난 정말 내 코드를 테스트해야합니다) –

+0

감사 get 메소드의 버그를 해결하기 위해, 충분히 적합 할 것 같다 : D –

+0

당신이 가능성은 허용 할 수 있다고 생각하십니까 대답? 그것은 엄청 많이 의미 할 것입니다 :) –