这是一个简化的代码:
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));
这段代码有两个问题。也许更多;)
看起来 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