我想在 php 中做这样的事情:我想让父类命名为“item”,还有一堆子类,如“sword”、“armor”等。我可以简单地调用:
$some_sword = new sword($id) ;
但我也想做这样的事情:
$some_sword = new item("sword",$id) ;
我希望这两个代码都能起到同样的效果。$some_sword 在两种方式中都必须是同一个类!
我想在 php 中做这样的事情:我想让父类命名为“item”,还有一堆子类,如“sword”、“armor”等。我可以简单地调用:
$some_sword = new sword($id) ;
但我也想做这样的事情:
$some_sword = new item("sword",$id) ;
我希望这两个代码都能起到同样的效果。$some_sword 在两种方式中都必须是同一个类!
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);