Объект создан внутри цикла foreach

0

Я создаю новый объект внутри цикла foreach, и я действительно не знаю, как вызвать конкретный объект, поскольку все они имеют одинаковое имя.

Вот класс:

class Item{
    public static $allItems = array();
    public $slot;
    public $id;

    public function __construct($slot, $id){
        self::$allItems[] = $this;
        $this->slot = $slot;
        $this->id = $id;
    }
}

И вот цикл foreach:

foreach($item_type as $key => $type){
        $itemID = $_SESSION[$type.'ID'];
        $item = new Item($key, $itemID);
    }

Есть ли способ назвать их по-другому или вызвать конкретный экземпляр?

  • 0
    Да, вы можете, в PHP есть способ вызывать complex variables , который позволяет вам именовать переменную во время выполнения, например, когда вы создаете переменную для каждого пользователя, используя user-id например, {'user' . $userid} и вызвать эту переменную используя {}
Теги:
object
foreach

2 ответа

3
Лучший ответ

Почему бы вам не создать ассоциативный массив с объектами и получить к ним доступ как элементы массива:

$elementsArray = array();

foreach($item_type as $key => $type){
    $itemID = $_SESSION[$type.'ID'];
    $elementsArray[$key] = new Item($key, $itemID);
}

Затем вы можете получить доступ к любому из них (предположив, что $key - это число):

$elementsArray[0] 
  • 0
    Таким образом, вместо использования массива внутри объекта, я должен сделать массив объекта? Тогда мне не нужно следующее свойство: public static $ allItems = array (); ?
  • 0
    ты не И вы не должны хранить экземпляры Item внутри Item потому что у каждого каждого элемента коллекции будет своя коллекция, и так далее, и так далее, и вы закончите бесконечным циклом
Показать ещё 2 комментария
0

Вы можете просто сделать $ item содержать массив.

$item = array();

foreach($item_type as $key => $type)
{
  $itemID = $_SESSION[$type.'ID'];
  $item[$itemID] = new Item($key, $itemID);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню