Как, например, синглтон с массивом синглетонов? Я уверен, что это может быть сделано, может быть, что-то похожее на это в вашем классе:
public static function getInstance($id) {
if (self::$_instances[$id] == null) {
self::$_instances[$id] = new self;
}
return self::$_instance[$id];
}
Конечно, это потребовало бы модификации, чтобы на самом деле получить ваш предмет и т. Д., И я не проверял это, но только мысль ...