PHP覆盖对象而不使用它[编辑]

时间:2017-01-01 22:40:24

标签: php html arrays object overwrite

好吧,我被搁置了,因为我不清楚我在问什么,所以让我重新说一下。我有这个变量:

$town->streets

我声明如下:

$town->streets[$i] = new street;
$town->streets[$i] = (Object)newStreet();

当然我是在for循环中做的。 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;

            }

        }

    }

    }

0 个答案:

没有答案