以下は単純化されたコードです。
Class Bar
{
static $foo;
public function __construct(Foo $foo)
{
$this->foo = $foo;
$this->loop($foo,1);
}
public function loop(Foo $foo, $index)
{
$a = $foo->a;
if ($index < 3)
{
$a[$index]->var2 += $a[$index]->var1;
$a[$index]->var1 = 0;
$foo->dump();
$this->foo->dump();
$this->loop(new Foo($a),++$index);
}
}
}
$p = array(
new Baz(100,200),
new Baz(300,400),
new Baz(400,200),
new Baz(600,400)
);
new Bar(new Foo($p));
このコードには 2 つの問題があります。おそらくもっとある;)
var1 の再割り当てが $foo に影響しているようです。$foo->a を $a に渡した後は、そうではないと思います。
コンストラクトでは、$foo を $this->foo に割り当てましたが、ループごとにその値が変更されます。$this->foo の値がどこで変化するか教えてもらえますか?
もう少し情報 Foo クラスの定義
Class Foo
{
public $a;
public function __construct($a)
{
$this->a = $a;
}
public function dump($title="")
{
echo "<br/>================".$title."=============================";
echo "<table>";
for ($i=0; $i<sizeof($this->a); $i++)
{
echo "<tr>";
echo "<td>" . $this->a[$i]->var1 . "</td>";
echo "<td>" . $this->a[$i]->var2 . "</td>";
echo "</tr>";
}
echo "</table>";
}
}
バズのクラス
Class Baz
{
public $var1;
public $var2;
public function __construct($var1, $var2)
{
$this->var1=$var1;
$this->var2=$var2;
}
}
ダンプの結果:
================IM foo dump=============================
100 200
0 700
400 200
600 400
================Im $this->foo dump=====================
100 200
0 700
400 200
600 400
================IM foo dump=============================
100 200
0 700
0 600
600 400
================Im $this->foo dump======================
100 200
0 700
0 600
600 400