php变量在循环中复制奇怪的行为
你好。面临着这样一个问题: 我有一个变量,它在循环中被重置和重新填充。我将该变量作为属性分配给其他变量(如$item->subitems)。 例如,我将$item收集到一个$items数组中。 此变量的每个循环都会重新设置和填充,并包含不同的数据。 近似示例代码如下所示:php变量在循环中复制奇怪的行为,php,Php,你好。面临着这样一个问题: 我有一个变量,它在循环中被重置和重新填充。我将该变量作为属性分配给其他变量(如$item->subitems)。 例如,我将$item收集到一个$items数组中。 此变量的每个循环都会重新设置和填充,并包含不同的数据。 近似示例代码如下所示: <?php $seasons = array(1,2); $ltabs= array(1); $all = array(1,2,3,4,5,6,7,8,9,0); foreach ($ltabs as $
<?php
$seasons = array(1,2);
$ltabs= array(1);
$all = array(1,2,3,4,5,6,7,8,9,0);
foreach ($ltabs as $tab)
{
//Resetting an object instance
$itm=false;
//Re-Initing object
if (1==1)
{
$itm->height = 1;
$itm->width = 2;
}
else
{
$itm->height = 3;
$itm->width = 4;
}
//And thats where crap happens
//foreach($seasons as $season) //Dont work that way too
for ($y=0;$y<count($seasons);$y++)
{
//Re-initing local array for needed values
$itemz=array();
//$itm->items = array();
for($a=0;$a < count($all);$a++) {
if ($all[$a] % $seasons)//Not tested, supposed to gove ANY dofference in arrays.
{
$itemz[]=$all[$a];
}
}
$itm->items = $itemz;
$rtabs[$season] = $itm;
unset($itemz);
//unset($itemz);
}
}
//Returns crap.
var_dump($rtabs);
?>
但是当我试着
<?php
foreach($rtabs as $itm)
{
var_dump($itm->items);
}
?>
我看到所有这些子项都包含相同的数据集。
只有在这个子循环中重新分配整个$itm变量,我才能成功地击败它。但我想澄清一下,为什么会这样?。。
根据文章-垃圾收集器和php的“写时拷贝”应该在我重置这个$itemz数组时初始化,所以对我来说,这一切看起来都很不正常。
任何帮助都将不胜感激。在php中,对象是通过引用复制的,因此在这一行:
$rtabs[$season] = $itm;
您没有将$itm
对象的副本放置到数组中,而是复制对它的引用。以后更改原始对象时,rtab
数组中的版本也会更改
如果你想单独复制,你需要这样做
$rtabs[$season] = clone $itm;
你的样品再现了错误吗?如果没有,请减少你的真实代码,直到你只剩下你所描述的代码。在这样做的过程中,99%的几率你会发现是什么导致了它,因为你没有仔细检查你自己的代码。不能投赞成票,但谢谢。解释得很好。标记为答案。没问题。很高兴我能帮忙。