unset() fungerar nog inte riktigt som du tror, framförallt är det inte en motsvarighet till free() i C.
Se följande två exempel;
function releaseMe() {
global $var;
unset($var);
}
$var = "Will I be released?";
releaseMe();
echo $var; // Output: Will I be released?
-------
function releaseMe(&$var) {
unset($var);
}
$var = "Will I be released?";
releaseMe($var);
echo $var; // Output: Will I be released?
Nu visar jag exemplet med en funktion, men det samma gäller för klasser. unset() agerar bara i det lokala blocket. Så var noga med hur du försöker frigöra minne.
Ytterligare ett exempel:
echo memory_get_usage(); // Exempel-output: 28455
$xml = simplexml_load_file("./my-file-with-lots-and-lots-of-data.xml");
echo memory_get_usage(); // Exempel-output: 76320
unset($xml);
echo memory_get_usage(); // Exempel-output: 28455
I det här exemplet spelar unset() en viktigare roll, som du ser.
Så tänk på var och hur du använder unset(), om du arbetar på globala variabler eller på ett objekt som tål att frigöras.
