Если я присваиваю значение переменной, которая не объявлена глобальной внутри функции, эта переменная будет автоматически отключена, когда функция завершится или будет отменена, только когда скрипт PHP завершит выполнение?
Я пытаюсь определить, умнее ли отключать временные переменные области действия функции внутри функции вручную или не беспокоиться о том, что они будут автоматически отключены механизмом PHP.
Переменная будет отменена, когда функция выйдет, если только она не имеет внешних ссылок на нее, которая сохранит ее «живой». Независимо от того, освобождается ли фактическая память, которую занимает переменная, или нет, она полностью зависит от сборщика мусора. GC – это дорогостоящая операция, и PHP будет использовать ее только при необходимости (например, при сбое памяти).
Это полностью зависит от объема функции. Теоретически, вы могли бы запустить весь сценарий в рамках одной функции (надеюсь, тот, который вызывает другие функции, но все же …).
Для разумно размерной функции с минимальными побочными эффектами вполне нормально оставлять свои объекты – их деструкторы будут вызваны после завершения функции (это второй эффект отмены), и они будут очищены в течение первого цикл очистки после завершения функции. Для большей функции, которая включает создание на большом количестве объектов, тогда было бы лучше вручную удалить объекты.
Zend Engine выполнит очистку для вас, уменьшив количество ссылок по мере необходимости .