Хорошо, я был приостановлен, потому что не было ясно, о чем я спрашиваю, поэтому позвольте мне перефразировать. У меня есть эта переменная:
$town->streets
Я заявляю это так:
$town->streets[$i] = new street;
$town->streets[$i] = (Object)newStreet();
Конечно, я делаю это внутри цикла.
Функция newStreet () генерирует случайное количество домов для улицы, у каждого дома есть некоторые атрибуты, такие как тип, арендаторы, магазин или библиотека, какие предметы внутри, если таковые имеются, и так далее. Сразу после этого я повторяю атрибуты домов типа магазина, чтобы увидеть, отличаются ли они.
Как и предполагалось, каждый магазин имеет разные атрибуты. Теперь, сразу после этого у меня есть некоторый код и после этого я повторяю то же самое для домов снова. Однако теперь каждый магазин совпадает с последним магазином массива, что означает, что он как-то перезаписан внутри некоторый код. Я не получаю доступ к домам, но изменяю другие переменные на улицах. Но я не знаю, почему дома и магазины перезаписываются.
Код выполняет свою задачу, а это означает, что ядра и улицы распределены так, как я хотел, поэтому нет никаких реальных ошибок, структура объектов никогда не была проблемой прежде, хотя у меня есть несколько объектов, структурированных подобным образом. Я также знаю, что помещение объекта в переменную просто создает ссылку на него (или мне так сказали), но я все еще не понимаю, почему он частично изменяется, когда я вообще не обращаюсь к этим частям вообще.
некоторый код как следует:
$town->cores[0] = new core;
$town->cores[0]->id = 0;
for($i = 0;$i < $streetnum;$i++){
if($town->streets[$i]->start == -1){
$cid = round(mt_rand(0,count($town->cores)-1));
$town->streets[$i]->start = $cid;
if(count($town->cores) > 1 && round(mt_rand(0,10)) > 8){//PICK EXISTING CORE
$ends = $town->cores;
unset($ends[$cid]);
$town->streets[$i]->end = $ends[array_rand($ends,1)]->id;
}else{//NEW CORE
$town->streets[$i]->end = count($town->cores);
$town->cores[$town->streets[$i]->end] = new core;
$town->cores[$town->streets[$i]->end]->id = $town->streets[$i]->end;
}
}
}
}
Задача ещё не решена.
Других решений пока нет …