Scientist 2 Denunciar post Postado Março 1, 2012 Gostaria de saber se o método unset pode destruir um objeto criado com : $objeto = new Objeto(); Compartilhar este post Link para o post Compartilhar em outros sites
Luis Paullo 47 Denunciar post Postado Março 1, 2012 faz o testes ue $objeto = new Objeto(); var_dump($objeto); unset($objeto); var_dump($objeto); =D Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 1, 2012 $objeto = null; ?? Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Março 1, 2012 Sim, usando a função unset ou atribuindo um valor nulo (ou qualquer outro valor) a variável que possui a instancia da classe você irá destruir esse objeto. Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Março 1, 2012 @leozitho Só uma dica para que você não tenha "surpresas" com seu gerenciamento de memória: Desde que ela não esteja sendo referenciada em uma outra variavel :thumbsup: No seu script, apesar de ela não ficar mais disponivel para uso diretamente, internamente ela fica "presa" caso tenha ligação com outra variavel. Exemplo: class Teste { public $pai; public $nome; public function __construct($nome){ $this->nome = $nome; } public function __destruct() { echo 'Matando o objeto ', $this->nome, PHP_EOL; } } $obj1 = new Teste('obj1'); $obj2 = new Teste('obj2'); $obj2->pai = $obj1; // aqui, matamos a variavel, // mas internamente, ela continua // vinculada ao obj2 echo 'Destruindo $obj1', PHP_EOL; unset($obj1); echo '$obj1 destruido', PHP_EOL; Veja que a saida foi: Destruindo $obj1 $obj1 destruido Matando o objeto obj2 Matando o objeto obj1 A linha Matando o objeto obj1 deveria aparecer logo depois de Destruindo $obj1, mas como existe uma referência de $obj1 dentro de $obj2, ele é destruído de verdade somente depois de destruir o $obj2. Ou seja, apesar da variável $obj1 em seu script estar nula depois do unset, internamente, ela ainda existe e está ocupando memória. Para confirmar isso, faça: echo $obj2->pai->nome; Logo depois do unset. Você vai ver que ainda tem acesso ao objeto ;) @braços e fiquem com Deus! Compartilhar este post Link para o post Compartilhar em outros sites