public function foo($file1, $file2){ $obj = new Obj(); $data = array(); $data[] = $obj->importAFile($file1); $data[] = $obj->importAFile($file2); return $data; } Does the memory allocated for $obj get freed after the return?If not how can I free it?
3 Réponses :
php utilise un collecteur de garbace. Il libère toutes les variables à laquelle il ne reste plus de références. En supposant que $ obj-> importatafile () ne renvoie pas à $ OBJ, la mémoire sera libérée. Cependant, il n'y a aucune garantie lorsque la mémoire sera libérée. Si $ OBJ contient une référence à elle-même, dans les anciennes versions de PHP, la mémoire ne sera pas libérée. Vous pouvez lire plus dans Documentation PHP P>
Il gère la mémoire pour vous. Vous pourriez avoir un problème uniquement lorsqu'il y a des références circulaires entre vos objets p>
En utilisant non défini () sur une variable, vous l'avez marqué pour la «collection à la poubelle» littéralement, lorsque PHP n'en a pas vraiment un, la mémoire n'est donc pas immédiatement disponible. La variable ne abrite plus les données, mais la pile reste à la taille actuelle même après avoir appelé non défini (). Réglage de la variable pour NULL goutt les données et rétrécit la mémoire de la pile presque immédiatement. p>
Cela a travaillé pour moi à plusieurs reprises où des avertissements épuisés par la mémoire ont été lancés avant le réglage, puis appelant non défini () après avoir annulé la variable. Appelant non défini après la nullisation pourrait ne pas être nécessaire mais je l'ai utilisé néanmoins après la nullification. P>
PHP a un collecteur à ordures. Vous l'activez avec gc_enable () code>, puis
gc_collect_cycles () code>
En PHP, il y a des ordures collectionneur Stackoverflow.com/ Questions / 1735492 / ...