Объекты в памяти удаляются после их использования?

У меня проблемы с тем, чтобы обернуть голову вокруг некоторых концепций объектно-ориентированного программирования (я из земли JavaScript). Я пишу плагин для WordPress, и очень небольшая часть работы всего плагина заключается в создании карты сайта для N список постов в блоге.

Эта функция выполняется, когда кто-то активирует плагин в главной панели инструментов.

function activate() {
$generator = new SitemapGenerator();
$generator->create_posts_sitemap();
}

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

class SitemapGenerator {

public function create_posts_sitemap() {
$header_xml = '<?xml version="1.0" encoding="UTF-8"?>';
$header_xml .= "\n";
$header_xml .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
$header_xml .= "\n\n";

$posts_xml = $header_xml;

foreach($this->posts as $post) {
$posts_xml .= "<url>\n";
$posts_xml .= "\t<loc>\t\n";
$posts_xml .= "\t\t" . esc_url(get_permalink($post));
$posts_xml .= "\n\t</loc>\t";
$posts_xml .= "\n</url>\n\n";
}
$posts_xml .= "</urlset>";
$this->write_to_file('sitemap_posts', $posts_xml);
}

private function write_to_file($filename, $contents) {
$file = get_home_path() . "/$filename.xml";
$open = fopen($file, "a");
ftruncate($open, 0);
fputs($open, $contents);
fclose($open);
}
}

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

У меня возникают проблемы, когда я обдумываю эту концепцию, поскольку код PHP находится на сервере, и я более привык работать с вещами в среде браузера.

1

Решение

@RamRaider правильный и предоставил соответствующую ссылку. Но в двух словах:

В земле Javascript один пользователь (в основном) делает одну вещь на одном компьютере.

На PHP-земле, миллиард пользователей делают самые разные вещи (в основном) на одном компьютере.

Следовательно, очистка памяти на месте проблематична. Вы будете удивлены, как что-то, что кажется простым, может помешать бесперебойной работе. Но на самом деле управление памятью плохо масштабируется.

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

Итак, самый простой ответ на ваш вопрос — «да».

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector