Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Singleton + Destruktor

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • peaceman
    antwortet
    Ich kann jetzt hier wohl schlecht den ganzen Projektordner posten, aber rein vom Aufbau her wird bei jedem Seitenaufruf
    PHP-Code:
    Vp_Log::getInstance(); 
    aufgerufen danach wird der FrontController gestartet, der dann die zuständigen ActionController aufruft. Diese Controller und die meisten anderen Klassen haben folgendes im Destruktor stehen
    PHP-Code:
    Vp_Log::w('destroying ' get_called_class(), 1); 
    Auf das Objekt wird während des Skriptablaufs immer mal wieder zugegriffen, wie das beim Logging eben so ist.

    Einen Kommentar schreiben:


  • Tidus
    antwortet
    Poste mal den Code, der die obige Ausgabe macht...

    Einen Kommentar schreiben:


  • peaceman
    antwortet
    Mir gehts darum, dass der Destruktor aufgerufen wird von PHP, das Objekt aber nicht gelöscht wird und somit auch der FileHandle im Konstruktor kein weiteres mal geöffnet wird, weil das Objekt ja noch da ist.

    Würde das Objekt gelöscht werden, nachdem der Destruktor aufgerufen wurde, wäre ja alles wie erwartet und das Logfile würde beim nächsten Aufruf des Log Objekts wieder geöffnet.

    Einen Kommentar schreiben:


  • Tidus
    antwortet
    Der Destruktor wird doch von PHP automatisch am ende des Skripts aufgerufen, also wenn das Skript durchgelaufen ist, wenn ich mich nicht irre. Wenn du also deine Log - Klasse ein weiteres mal aufrufst, hast du auch ein weiteres mal zur Laufzeit Zugriff auf dieses Objekt und die Methoden werden auch ausgeführt, da das Objekt ja noch besteht. Der Destruktor gibt den Speicher doch nur zum Ende des Skripts wieder frei, wenn das Objekt nicht mehr gebraucht wird. Aber du rufst es ja zwei mal auf, also wird das Objekt auch zwei mal verwendet.

    Einen Kommentar schreiben:

Lädt...
X