2015-01-30 3 views
0

Я создаю новый объект внутри цикла foreach, и я действительно не знаю, как вызвать конкретный объект, поскольку все они имеют одинаковое имя.Объект, созданный внутри цикла 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($item_type as $key => $type){ 
     $itemID = $_SESSION[$type.'ID']; 
     $item = new Item($key, $itemID); 
    } 

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

+0

Да, вы можете, Существует способ в PHP называют 'сложный variables' этот путь позволяет именованной переменной во время выполнения, например, когда вы клеть переменной для каждого пользователя, используя' пользовательский id', как это '{ «пользователь». $ userid} 'и вызывать эту переменную с помощью' {} ' – Abutouq

ответ

2

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

$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(); ? – loumi

+0

у вас нет. И вы не должны хранить экземпляры '' Item'' внутри '' Item'', потому что каждый элемент коллекции будет иметь другую коллекцию внутри и т. Д. И т. Д., И вы закончите бесконечный цикл –

+0

. знайте это. Спасибо за ваш ответ :) – loumi

0

Вы можете просто создать $ item, содержащий массив.

$item = array(); 

foreach($item_type as $key => $type) 
{ 
    $itemID = $_SESSION[$type.'ID']; 
    $item[$itemID] = new Item($key, $itemID); 
} 
Смежные вопросы