Ben PHP4 ve PHP5 arasında farklı davranır görünen bazı kod var. Aşağıda bu kodu:
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
// reseting 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();
Daha önce, PHP4, yukarıda $ foo2 bir atama bu aslında ayarlanmıştır $ değerine geri $ foo2 sıfırlamak olacaktır. Bu durumda, ben boş bir $ dizi elemanı ile bir CFoo ayarlanmış olması beklenir. Ancak, $ foo2 dolar bu atama referans ile bir atama olarak davranmaktadır. Foo2 bu bir takma ad olarak davranmaktadır. Ben foo2 üzerinde "AddToArray" diyoruz Bu nedenle, $ bu $ dizi de eklenir ediliyor bulunuyor. Ben bunun yerine başlangıç değeri alma, geri bu FOO2 yeniden atamak için gittiğinizde Yani, aslında kendi kendine atama olsun.
Bu davranış PHP5 değişti? Ne bu bir kopyasını yapmak için FOO2 zorlamak için ne yapabilirim?