Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Scientist

Destruir objeto com unset

Recommended Posts

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

$objeto = null;

??

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.