J'ai un code qui semble se comporter différemment entre PHP 4 et PHP 5. Ce code ci-dessous:Pourquoi l'opérateur d'affectation PHP agit-il comme une affectation par référence dans ce cas?
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();
Auparavant, en PHP 4 , l'affectation de foo2 $ serait au-dessus de remettre foo2 $ Retour à la la valeur que $ a été définie à l'origine. Dans ce cas, je m'attendrais à ce qu'il soit défini sur CFoo avec un membre $ arr vide. Cependant, l'affectation de $ foo2 à $ this agit comme une affectation par référence. Foo2 agit comme un alias à cela. Par conséquent, lorsque j'appelle "AddToArray" sur foo2, $ $ arr est également ajouté. Donc, quand je vais ré-assigner foo2 à cela, au lieu d'obtenir la valeur initiale de ceci, je reçois essentiellement une auto affectation.
Est-ce que ce comportement a changé dans PHP 5? Que puis-je faire pour forcer foo2 à en faire une copie?
Comment forcer une copie? –
Juste ajouté la réponse. – Matijs