Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá colegas
Estou tendo o seguinte problema, ao clonar um objeto que contém um atributo que é um array aparentemente o PHP está mantendo a mesma referência de memória tanto para a instância do objeto original quanto para sua cópia. Segue código de exemplo:
<?php
public $nome;
}
public $atributo = "";
private $pessoas = array();
# Adiciona no Array
public function adicionar(Pessoa $pessoa) {
array_push($this->pessoas, $pessoa);
}
# Retorna indice do array
public function pegar($indice)
{
return $this->pessoas[$indice];
}
}
$pessoas = new Pessoas();
$pessoas->atributo = "Original";
$pessoas2 = new Pessoas();
$pessoas2 = clone $pessoas;
$pessoas2->atributo = "Cópia";
$pessoas2->pegar(0)->nome = "Nome 2";
echo var_dump($pessoas);
echo "<br><br>";
echo var_dump($pessoas2);
?>
O Resultado é esse
>
object(Pessoas)#2 (2) { ["atributo"]=> string(8) "Original" ["pessoas:private"]=> array(1) { [0]=> object(Pessoa)#1 (1) { ["nome"]=> string(6) "Nome 2" } } }
object(Pessoas)#4 (2) { ["atributo"]=> string(5) "Cópia" ["pessoas:private"]=> array(1) { [0]=> object(Pessoa)#1 (1) { ["nome"]=> string(6) "Nome 2" } } }
Ou seja, quando seto o nome para o clone ele afeta também o objeto original... Não sei o que estou fazendo de errado...
Estou usando o PHP 5.2.6
Carregando comentários...