Нужно ли мне уничтожать объекты в PHP после их использования?

Насколько важно разрушение объектов в PHP? важно ли уничтожать объекты в PHP после их использования? потому что в отличие от java, PHP не имеет сборщика мусора (ничего, что я знаю)

Вам не нужно уничтожать объекты в общем случае, и у PHP, безусловно , есть сборщик мусора . Более того, большинство простых скриптов даже не нуждаются в этом, потому что вся среда срывается и перестраивается для каждого HTTP-запроса; сборщик мусора помогает тем сценариям, которые исчерпали память при обслуживании одного запроса.

Исключения из общего случая:

Возможно, вы захотите «потерять» все ссылки на объекты, которые потребляют большой объем памяти и / или обертывают неуправляемые ресурсы; это обычно так же просто, как

$largeObject = null; // reference to previous value lost 

Если это была последняя ссылка на $largeObject , то:

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

Конечно, все это не учитывается в типичном случае «обслуживание запроса, а затем выхода».

Существует встроенный механизм сбора мусора (также известный как GC), который является частью PHP 5.3.

 <?php gc_enable(); // Enable Garbage Collector var_dump(gc_enabled()); // true var_dump(gc_collect_cycles()); // # of elements cleaned up gc_disable(); // Disable Garbage Collector ?> 

Надеюсь, поможет! 🙂

У Php есть сборщик мусора, но на практике есть много случаев, когда php не освобождает память до тех пор, пока не будет выполнена функция unset . Эти случаи относятся к singleton, xml, могут быть тканями. В нашей компании мы исправили php и зарегистрировали все распределения памяти и добавили функцию unset в код. Но в веб-разработке это не так важно.

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

Решением на данный момент является использование unset ($ object), который вызывает функцию magic __destruct (), которую вы можете использовать, если хотите что-либо сделать с объектом (например, сохранить данные в базе данных).

Обычно это не проблема, которую вы должны учитывать. Вот статья об одном парне, который встретил эту проблему.

http://paul-m-jones.com/archives/262

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

 function __destruct() { //do stuff } 

Объект может оставаться в памяти на время запроса или при вызове из командной строки, пока скрипт остается включенным.