PHP 4 と PHP 5 で動作が異なるように見えるコードがいくつかあります。このコードは次のとおりです。
class CFoo
{
var $arr;
function CFoo()
{
$this->arr = array();
}
function AddToArray($i)
{
$this->arr[] = $i;
}
function DoStuffOnFoo()
{
for ($i = 0; $i < 10; ++$i)
{
$foo2 = new CFoo();
$foo2 = $this; // I expect this to copy, therefore
// resetting back to the original $this
$foo2->AddToArray($i);
echo "Foo2:\n";
print_r($foo2);
echo "This:\n";
print_r($this);
}
}
}
$foo1 = new CFoo();
$foo1->DoStuffOnFoo();
以前は、PHP 4 では、上記の $foo2 の割り当てにより、$foo2 が $this が最初に設定された値にリセットされていました。この場合、空の $arr メンバーを持つ CFoo に設定されることを期待します。ただし、$foo2 の $this への代入は、参照による代入として機能します。Foo2 はこれに対するエイリアスとして機能しています。したがって、foo2 で「AddToArray」を呼び出すと、$this の $arr も追加されます。したがって、foo2 をこれに再割り当てしようとすると、これの初期値を取得する代わりに、本質的に自己割り当てが行われます。
この動作は PHP 5 で変更されましたか? foo2 にこれのコピーを強制的に作成させるにはどうすればよいですか?