php5 массив объектов.

ZloiJoker

Новичок
php5 массив объектов.

$rows = array ();
$i=0;
while ($items->fetch ())
{
$rows[$i] = & new ViewRow ($data, $items->$idfield, $items) ;
$i++;
}

НО почему то по мере пробигания цикла, все обекты почему то указывают на последний объект массива.
 

zerkms

TDD infected
Команда форума
убери &

-~{}~ 26.03.07 19:01:

ps:

$a =& new stdClass();
$b =& new stdClass();

var_dump($a, $b);
 

zerkms

TDD infected
Команда форума
ZloiJoker
выполни код который я тебе привёл и ищи свою ошибку
 

ZloiJoker

Новичок
$a и $b идентичны и обсолютно корректны, проблема при складывание в массив происходит.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
в чем проблема, т.е. какая цель изначально была?
приведи, пожалуйста, короткий пример, который можно выполнить
 

zerkms

TDD infected
Команда форума
$arr = array();
$arr['a'] =& new stdClass();
$arr['b'] =& new stdClass();

var_dump($arr);

абсолютно никакой проблемы нет
 

ZloiJoker

Новичок
Что значит нет проблем, проблемы есть, мы топчимся на месте...
чем мой код отличается:
$rows = array ();
$i=0;
while ($items->fetch ())
{
$rows[$i] = & new ViewRow ($data, $items->$idfield, $items) ;
$i++;
}

почему $rows[1] == $rows[0]
и с каждым циклом все объекты массива указывают на последний присвоенный объект ???
 

jonjonson

Охренеть
ZloiJoker, я не знаю что фетчит это $items->fetch () и куда.
И потом вот это $items->$idfield.
Зачем то еще раз передаётся $items.
Посему есть сомнения в правдивости и\или разумности кода.
Следовательно, что вам можно посоветовать?
 

ZloiJoker

Новичок
каждый раз new ViewRow ($data, $items->$idfield, $items) ;
проходя новый цикл воздает новый объект класса, с разными значения переменными внутри класса.
Но прискладывание этого в массив объектов, все элементы массива почемуто указывают на последний объект.

вот так выглядит конструктор класса:
class ViewRow
{
var $data;
var $id;
var $item;

function ViewRow ($data, $id, &$item)
{
$this->data = $data;
$this->id = $id;
$this->item = $item;
}
}
 

jonjonson

Охренеть
ZloiJoker, это ты описываешь то, что приведённый выше код не является истинным? Что он примерно то, чего ты хочешь добиться?

Мало того, что это $items->$idfield не отдаёт никакого id, а $items опять те же самые, так как $items->fetch () чего-то шебуршит в себе и сообщает циклу, продолжает ли оно шебуршать, но остаётся всё тем же объектом. Но ещё не понятно как должны меняться для каждого объекта $data, которые в цикле ни где не фигурируют и значит то-же постоянны...
 

zerkms

TDD infected
Команда форума
jonjonson
Что значит нет проблем, проблемы есть, мы топчимся на месте...
это значит
1. виноват не пхп а ты
2. у пхп проблем нет
3. топчешься на месте ты

на все 3 вопроса ответ один - phpfaq.ru/debug
 

tashkentchi

Новичок
Автор оригинала: ZloiJoker
почему $rows[1] == $rows[0]
и с каждым циклом все объекты массива указывают на последний присвоенный объект ???
$rows[1] == $rows[0] может иметь место, даже если они указывают на разные экземпляры.

А попробуй $rows[1] === $rows[0]
Если они указывают на один и тот же объект - будет true, иначе - false (это в 5-м ПХП)
 

AmdY

Пью пиво
Команда форума
в пхп5 обьекты передаются по ссылке, для клонирования кури __clone
 

TotiMan

Новичок
Автор оригинала: ZloiJoker
каждый раз new ViewRow ($data, $items->$idfield, $items) ;
проходя новый цикл воздает новый объект класса, с разными значения переменными внутри класса.
Но прискладывание этого в массив объектов, все элементы массива почемуто указывают на последний объект.

вот так выглядит конструктор класса:
class ViewRow
{
var $data;
var $id;
var $item;

function ViewRow ($data, $id, &$item)
{
$this->data = $data;
$this->id = $id;
$this->item = $item;
}
}
Разве твой ViewRow что возвращает? :)

-~{}~ 28.03.07 12:29:

для справки: чтобы ссылаться на объект он должен иметь тип любой кроме void и boolean (array, string, int, float)
 
Сверху