Tanto quanto eu sei (o que é muito pouco), existem duas maneiras, dadas:
$var = new object()
Então:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
Outro método melhor? Estou partindo cabelos aqui?
fonte
Tanto quanto eu sei (o que é muito pouco), existem duas maneiras, dadas:
$var = new object()
Então:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
Outro método melhor? Estou partindo cabelos aqui?
Você está procurando unset()
.
Mas leve em consideração que você não pode destruir explicitamente um objeto.
Ele permanecerá lá, no entanto, se você desarmar o objeto e seu script enviar o PHP para os limites de memória, os objetos não necessários serão coletados como lixo. Eu aceitaria unset()
(em vez de configurá-lo como nulo), pois parece ter melhor desempenho (não testado, mas documentado em um dos comentários do manual oficial do PHP).
Dito isto, lembre-se de que o PHP sempre destrói os objetos assim que a página é veiculada. Portanto, isso só deve ser necessário em loops muito longos e / ou páginas intensas e pesadas.
new
uma vez, devemos usardelete
uma vez. Isso não é verdade em PHP? Há coleta automática de lixo quando o objeto não é mais necessário?unset()
remove a referência para o objeto?Um post útil que explica vários mal-entendidos sobre isso:
Não ligue explicitamente para o destruidor
Isso cobre vários conceitos errados sobre como o destruidor funciona. Chamar explicitamente não destruirá sua variável, de acordo com o documento do PHP5:
A postagem acima afirma que definir a variável como nula pode funcionar em alguns casos, desde que nada mais esteja apontando para a memória alocada.
fonte
Resposta curta: Ambos são necessários.
Eu sinto que a resposta certa foi dada, mas minimamente. Sim, geralmente o unset () é melhor para "velocidade", mas se você deseja recuperar a memória imediatamente (ao custo da CPU) deve usar nulo.
Como outros mencionados, definir como nulo não significa que tudo é recuperado, é possível ter objetos de memória compartilhada (não clonados) que impedirão a destruição do objeto. Além disso, como outros já disseram, você não pode "destruir" os objetos explicitamente de qualquer maneira, portanto não deve tentar fazê-lo.
Você precisará descobrir qual é o melhor para você. Além disso, você pode usar __destruct () para um objeto que será chamado não configurado ou nulo, mas deve ser usado com cuidado e, como outros disseram, nunca será chamado diretamente!
Vejo:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/
Qual é a diferença entre atribuir NULL e não definir?
fonte
Esta é uma prova simples de que você não pode destruir um objeto, apenas um link para ele.
retorna
Veja em ação aqui: https://eval.in/1054130
fonte
$var2
que era uma referência$var
. Agora você destrói$var
também e, presumindo que não haja outras referências no objeto, está pronto.Pode estar em uma situação em que você está criando um novo objeto mysqli.
$MyConnection = new mysqli($hn, $un, $pw, $db);
mas mesmo depois de fechar o objeto
$MyConnection->close();
se você usar
print_r()
para verificar o conteúdo$MyConnection
, receberá um erro como abaixo:nesse caso, você não pode usá-lo
unlink()
porqueunlink()
exigirá uma string de nome de caminho, mas nesse caso$MyConnection
é um objeto.Então você tem outra opção de definir seu valor como nulo:
$MyConnection = null;
agora as coisas vão bem, como você esperava. Você não possui nenhum conteúdo dentro da variável
$MyConnection
e já limpou o objeto mysqli.É uma prática recomendada fechar o objeto antes de definir o valor da sua variável como
null
.fonte
Eu usaria o unset porque poderia dar ao coletor de lixo uma dica melhor para que a memória possa estar disponível novamente mais cedo. Cuidado para que tudo o que o objeto aponta tenha outras referências ou seja desabilitado primeiro, ou você realmente terá que esperar no coletor de lixo, pois não haveria identificadores para eles.
fonte