我想在php中做这样的事情: 我希望有一个名为“item”的父类,以及一堆像“剑”,“盔甲”等的子类。 我可以简单地打个电话:
$some_sword = new sword($id) ;
但我也想这样做:
$some_sword = new item("sword",$id) ;
我希望这两个代码都具有相同的效果。 $ some_sword必须在两个方面都是同一个类!
答案 0 :(得分: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);