Ich habe Probleme, meinen Kopf um einige objektorientierte Programmierkonzepte zu wickeln (ich komme aus JavaScript Land). Ich schreibe ein Wordpress-Plugin, und eine sehr kleine Teilmenge des gesamten Plugins ist die Erstellung einer Sitemap für eine n Liste von Blog-Posts.Werden Objekte im Speicher entfernt, nachdem sie verwendet wurden?
Diese Funktion wird ausgeführt, wenn jemand das Plugin im Haupt-Dashboard aktiviert.
Hier ist eine vereinfachte Version der Klasse, nur damit Sie sehen können, wie es strukturiert ist. Es ist nicht wirklich wichtig zu verstehen, wie der Code in ihm funktioniert, aber ich werde ihn einbeziehen, um einen besseren Überblick darüber zu geben, woran ich gerade arbeite.
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);
}
}
Meine Frage ist, sind Instanzen von Objekten aus dem Speicher entfernt, nachdem sie verwendet werden? Wie Sie sehen können, generiert all diese Klasse eine Sitemap und muss nicht direkt nach der Ausführung im Speicher vorhanden sein. Ich frage mich auch, ob ich sogar eine Klasse verwenden muss, um diese Funktionalität auszuführen (nicht in der Antwort erforderlich, aber wenn Sie das auch noch erläutern könnten, wäre das großartig).
Ich habe Probleme, meinen Kopf um das Konzept zu wickeln, da der PHP-Code auf einem Server sitzt und ich mehr daran gewöhnt bin, mit Dingen in der Browserumgebung zu arbeiten.
Haben Sie in Garbage Collection in PHP gelesen? http://php.net/manual/en/features.gc.php – RamRaider
Wird dies einen Blick geben. Definitiv ein wenig über meinen Kopf, wie sie es erklären, aber vielleicht kann ich andere Tutorials online über Garbage Collection finden. –
Ich fand einen anderen Artikel, der sagt, dass wenn ein Aktionsbereich endet, alles darin zerstört wird. Wenn das der Fall ist, dann wird, sobald die Funktion zum Schreiben in Datei in der Instanz der Klasse beendet ist, der gesamte von der Funktion activate belegte Speicher zerstört. Ist das richtig? –