Во-первых, я думаю, что вы должны точно описать, что вы подразумеваете под "в конце функции", вы имеете в виду в конце вызова функции или ...?
PHP сохраняет функцию в памяти как конструкцию, если хотите, невыполненный код, затем, когда функция выполняется в зависимости от того, что функция на самом деле делает, выделяется память.
Например, если бы у меня была следующая функция:
function test()
{
$data = array();
for($i = 0; $i < 10000; $i++)
{
$data[] = array('one','two','three','four','five','six',);
}
}
функция вызывается и для массива создается ссылка на память, каждый раз, когда вы повторяете цикл, память увеличивается.
Затем функция завершается, но если вы заметили, что данные не возвращаются, это потому, что локальная переменная доступна только для этой текущей области, там она больше не будет использоваться и сборщик мусора очищает память.
Так что да, он очищает выделенную память в конце вызова функции.
Небольшой совет (не относится к объектам в PHP 5).
вы можете передавать данные по ссылкам, так что вы можете изменять только одну и ту же выделенную память независимо от функции,
например:
/*
Allocate the string into the memory into
*/
$data = str_repeat("a",5000);
function minip(&$data)
{
$_data &= $data;
$_data = '';
}
Я передаю точку в $data
новой переменной, которая просто указывает на старую, таким образом вы можете передавать данные, не заставляя сборщик мусора использовать больше ресурсов.