내가 PHP 4, PHP 5. 아래에이 코드 사이에 다르게 행동 나타납니다 몇 가지 코드가 : PHP 4,PHP 할당 연산자가이 경우 참조로 할당 역할을하는 이유는 무엇입니까?
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();
이전을, 위의 $에서는 foo2의 할당은 다시 $에서는 foo2를 다시 것 $ this가 원래 설정된 값. 이 경우 빈 $ arr 멤버가있는 CFoo로 설정 될 것으로 예상됩니다. 그러나 $ foo2를 $ this에 할당하면 참조로 할당이됩니다. Foo2가 이에 대한 별칭 역할을합니다. 따라서 foo2에서 "AddToArray"를 호출하면 this $ arr도 추가됩니다. 그래서 foo2를 다시 할당하려고 할 때, 이것의 초기 값을 얻지 않고, 본질적으로 자체 할당을 얻습니다.
이 동작은 PHP 에서 변경 되었습니까? foo2가이를 복사하도록하려면 어떻게해야합니까?
어떻게 강제로 복사합니까? –
답변을 추가했습니다. – Matijs