Переменные функции PHP и сборщик мусора - PullRequest
1 голос
/ 03 марта 2012

Мне было интересно, сможет ли кто-нибудь ответить мне на этот быстрый вопрос. Я попытался найти его, но у меня возникают похожие вопросы, но в неправильном контексте.

Что мне интересно, так это взять код:

function foo()
{
    $test_array = array();
    for($i=0; $i<10000000; $i++)
    {
        $test_array[] = $i;
    }
}

Что происходит с $ test_array после завершения функции. Я знаю, что это теряет сферу, я не новичок в программировании.

Мне интересно, позвонить ли мне

unset($test_array);

до завершения функции или PHP устанавливает ее для удаления в сборщик мусора по окончании функции?

Я использовал цикл for, чтобы показать переменную правильного размера, чтобы донести свою точку зрения.

Спасибо за чтение Кевин

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Как только $ test_array больше не находится в области видимости (и нет дополнительных ссылок, указывающих на него), он помечается для сборки мусора. Он перестает быть в области видимости, когда процесс возвращается из функции в вызывающую подпрограмму. Так что нет необходимости сбрасывать его. Это было бы иначе, если бы вы объявили $ test_array как статический

0 голосов
/ 03 марта 2012

unset () не освобождает память, которую использует переменная, она просто помечает ее как сборщик мусора, который решает, когда освободить память (когда у нее свободные циклы процессора или когда у нее заканчивается память, в зависимости от того, что произойдет раньше) ).

Однако вы должны понимать, что ВСЕ память, используемая сценарием PHP, освобождается по завершении сценария, которое в большинстве случаев измеряется в миллисекундах, поэтому, если вы не выполняете какие-либо длительные операции, которые превышают «нормальный» "время выполнения скрипта PHP, вам не нужно беспокоиться об освобождении памяти.

...