Foi mencionado na página do manual não configurado em 2009 :
unset()
faz exatamente o que seu nome diz - desativa uma variável. Não força a liberação imediata da memória. O coletor de lixo do PHP fará isso quando achar conveniente - por intenção, assim que os ciclos da CPU não forem necessários, ou tão tarde quanto antes o script ficaria sem memória, o que ocorrer primeiro.
Se você estiver fazendo $whatever = null;
, está reescrevendo os dados da variável. Você pode liberar / reduzir a memória mais rapidamente, mas pode roubar os ciclos da CPU do código que realmente precisa deles mais cedo, resultando em um tempo de execução geral mais longo.
(Desde 2013, essa unset
página de manual não inclui mais essa seção)
Observe que até o php5.3, se você tiver dois objetos em referência circular , como em um relacionamento pai-filho, chamar unset () no objeto pai não liberará a memória usada para a referência pai no objeto filho. (A memória também não será liberada quando o objeto pai for coletado pelo lixo.) ( Bug 33595 )
A pergunta " diferença entre unset e = null " detalha algumas diferenças:
unset($a)
também remove $a
da tabela de símbolos; por exemplo:
$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);
Saídas:
Notice: Undefined variable: a in xxx
NULL
Mas quando $a = null
é usado:
$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:
NULL
Parece que $a = null
é um pouco mais rápido que o seu unset()
equivalente: atualizar uma entrada da tabela de símbolos parece ser mais rápido do que removê-la.
- quando você tenta usar uma
unset
variável inexistente ( ), um erro será acionado e o valor da expressão da variável será nulo. (Porque, o que mais o PHP deve fazer? Toda expressão precisa resultar em algum valor.)
- Uma variável com nulo atribuído a ela ainda é uma variável perfeitamente normal.
$whatever
apontar para um objeto,$whatever = null
substitui o ponteiro, não o objeto em si, portanto, ele age basicamente da mesma forma queunset()
.