我有一些代码在 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 重新分配回 this 时,我并没有得到 this 的初始值,而是得到了一个自赋值。
这种行为在 PHP 5 中改变了吗?我能做些什么来强制 foo2 复制这个?