В дополнение к реализации класса baseItem, как было предложено, вы также можете рассмотреть возможность разработки класса интерфейса для описания методов, которые должны иметь все элементы. Затем каждый тип элемента может реализовывать эти методы по-разному.
Например, для всех предметов может потребоваться метод equip (), но реализуйте его по-разному в зависимости от того, к какому виду предметов это относится. Возможно, вам не нужно создавать класс для каждого отдельного элемента, но вам, вероятно, следует создавать классы, которые способны создавать уникальные экземпляры элементов на основе некоторой структуры данных, которую вы предоставляете (которую можно хранить в базе данных).
Действительно общий пример может быть:
class Leather_Armor extends Armor_Base implements Equippable
{
// these would probably be defined in the base class instead of here
protected $_itemName;
protected $_itemDescription;
protected $_defenseRating;
public function __construct(params)
{
// intialize properties with data from the db
}
// the Equippable interface requires us to define this function
public function equip()
{
// call a function from the base class
$this->recalculateDefenseRating($this->defenseRating)
}
}
Возможно, вам следует прочитать об интерфейсах и абстрактных классах, чтобы полностью понять идею.
Кроме того, имейте в виду, что это действительно широкий, открытый вопрос, к которому можно обратиться тысячами разных способов. Вы можете задать что-то более конкретное или привести конкретные примеры.