Как работает сборка мусора в PHP?А именно, как очищаются локальные переменные функции? - PullRequest
2 голосов
/ 22 апреля 2011

Если я назначу значение переменной, которая не объявлена ​​глобальной в функции, будет ли эта переменная автоматически сбрасываться после завершения функции или будет сброшена только после завершения выполнения сценария PHP?

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

Ответы [ 3 ]

4 голосов
/ 22 апреля 2011

Переменная будет сброшена при выходе из функции, если только она не имеет внешних ссылок на нее, которые поддерживали бы ее «живой».Освобождена ли фактическая память, занятая переменной, полностью зависит от сборщика мусора.GC - дорогостоящая операция, и PHP будет вызывать ее только тогда, когда это необходимо (например, переполнение памяти).

1 голос
/ 22 апреля 2011

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

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

0 голосов
/ 22 апреля 2011

Zend Engine выполнит за вас очистку, уменьшит число ссылок по мере необходимости .

...