У меня есть некоторый код, который, кажется, ведет себя по-разному между 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 до значения, в котором изначально было установлено значение $. В этом случае я ожидаю, что он будет установлен в CFoo с пустым членом $ arr. Однако назначение $ foo2 для $ this действует как назначение по ссылке. Foo2 действует как псевдоним этого. Поэтому, когда я вызываю «AddToArray» для foo2, $ this's $ arr также добавляется. Поэтому, когда я возвращаюсь к foo2, вместо того, чтобы получить начальное значение этого, я получаю собственное назначение.
Изменилось ли это поведение в PHP 5? Что я могу сделать, чтобы foo2 сделал копию этого?