Richard: in __destruct asXML() aufrufen

Hallo,

ich habe mir eine Klasse XMLConnection geschrieben, die im Konstruktor simplexml_load_file() aufruft und so ein XML-Handle erzeugt. Außerdem hat die Klasse diverse Funktionen zum Editieren der XML-Datei, die auch alle wunderbar funktionieren.

Im Destruktor wollte ich nun die editierten XML-Daten per asXML( $filename ) zurückspeichern. Dies funktioniert aber offensichtlich nicht. Die Methode __destruct sieht genau so aus:

public function __destruct() {  
    if( !$this->xml->asXML( $this->filename ) ) {  
      throw new Exception( 'Datei ' . $filename . ' wurde nicht gespeichert.' );  
    }  
  }

Wenn ich jetzt über meine add()-Funktion Datensätze hinzufüge, klappt das auch so weit. Ich habe eine view()-Funktion geschrieben, die mir alle Datensätze ausgibt, und dort tauchen die zur Laufzeit per add() hinzugefügten Sätze auf. Wenn ich das Script dann aber erneut aufrufe, stehen sie nicht mehr dort. asXML() wurde also offensichtlich nicht aufgerufen. (es erscheint auch weder meine Exception-Message noch eine PHP-Fehlermeldung)

Ich dachte immer, für genau solche Operationen ist ein Destruktor da? Ich habe OOP bisher nur in Java betrieben, wo es ja bekanntlich keine Destruktoren gibt.

Wenn ich eine normale Funktion save() schreibe, die exakt dieselbe Funktionalität hat, funktioniert es. Dies hat dann aber den Nachteil, dass ich save() manuell aufrufen muss.

Kann man so etwas nicht mit Destruktoren machen?

Grüße
Richard

  1. Hallo Ingrid,

    wenn ich das Objekt explizit (mit unset()) lösche, klappt´s. Hab wohl vergessen, dass es in PHPtown keine Müllabfuhr gibt. Da muss Sperrmüll entsorgt werden…

    Grüße
    Richard