Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Queria saber se há necessidade de dar unset em arrays ou objetos grandes que estão "gravados" em alguma variável local (da função), quando estou trabalhando com elas está dentro da função.
Bem, chegando a uma conclusão, como diria um amigo meu: "tudo depende!".
Se precisar trabalhar com vários valores grandes dentro da função, de todo jeito será bom usar unset().
O motivo da minha pergunta é que percebi que o PHP trata cada uma das situação de maneira diferente (o retorno da função e o valor guardado na variável).
Dê uma olhada nos resultados:
<?php $var = range('a', 'd'); foreach($var as &$v) { $v = "<<<[$v]>>>>"; // coloca um delimitador } print_r($var); /** Array ( [0] => <<<[a]>>>> [1] => <<<[b]>>>> [2] => <<<[c]>>>> [3] => <<<[d]>>>> ) */ foreach(range('a', 'z') as &$z) { $z = "<<<<<$z>>>>>"; //Fatal error: Cannot create references to elements of a temporary array expression in C:\xampp\htdocs\teste\index.php on line 12 }
Resposta pra sua pergunta:
<?php
function floodMemory()
{
$container = array();
foreach (range(0, 1023) as $kByte) {
$container[] = range(0, 1023);
}
return memory_get_usage();
}
echo memory_get_usage() . PHP_EOL;
echo floodMemory() . PHP_EOL;
echo memory_get_usage() . PHP_EOL;
Caso você tenha um erro de memória insuficiente na função floodMemory, basta diminuir o primeiro 1023 pra 511 ou 255
Não tenho a resposta para a sua dúvida, dei uma olhada na documentação do unset e function, não achei nada sobre.
Até onde eu sei o unset é bom para liberar memoria. Mas, como você está usando uma variavel local, será que a própria function já não da um unset automaticamente? São boas questões... Onde está os expert do forum para dá aquela força? kkkkk :P