Heizer: objektiver Selbstmord

Liebes Forum

Ich frage mich gerade, ob es möglich ist, daß sich ein Objekt selbst zerstört. Eines meines größeren hat eine Funktion, die dessen Ausgabe an den Browser schickt, und danach brauche ich es nicht mehr, und ich würde den Speicherplatz gerne wieder freigeben. Ich habe es in der Funktion mit unset($this) versucht, was keinen Fehler erzeugt, und auch $this innerhalb es Objekts löscht, aber eben nicht von außen.

Weiß jemand, ob das machbar ist? Ach, es muß leider mit PHP4 funktionieren...

Grüße

Heizer

  1. Hallo Heizer,

    Ich frage mich gerade, ob es möglich ist, daß sich ein Objekt selbst zerstört. Eines meines größeren hat eine Funktion, die dessen Ausgabe an den Browser schickt, und danach brauche ich es nicht mehr, und ich würde den Speicherplatz gerne wieder freigeben. Ich habe es in der Funktion mit unset($this) versucht, was keinen Fehler erzeugt, und auch $this innerhalb es Objekts löscht, aber eben nicht von außen.

    Vielleicht solltest du das unset($Instanzname) außerhalb des Objekts aufrufen, damit auch wirklich sicher gestellt ist dass das Objekt entfernt wird.
    Mit anderen Worten irgendwie so:

    // ...
    $Instanzname.letzteAktion();
    unset($Instanzname);
    // weiterer Code...

    Auch wenn unset keinen Fehler ausgibt (die Variable $this wird ja schließlich gelöscht) solltest du es so machen, damit die _Instanz_ zerstört wird.

    Ungetestet, aber vielleicht klappt es ja so!

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
    1. Entschuldigung, wir sind ja in PHP - also keine Punkte verwenden für Objekte. ;-)
      Der Code lautet also dann folgendermaßen:

      // ...
      $Instanzname=>letzteAktion();
      unset($Instanzname);
      // weiterer Code...

      Bis dann!

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
      1. Hallo Marc!

        Entschuldigung, wir sind ja in PHP - also keine Punkte verwenden für Objekte. ;-)
        Der Code lautet also dann folgendermaßen:
        // ...
        $Instanzname=>letzteAktion();
        unset($Instanzname);
        // weiterer Code...

        Müßte es nicht $Instanzname->letzteAktion(); heißen?
        (Siehe auch PHP Manual: Chapter 18. Classes and Objects (PHP 4))

        MfG
        Götz

        --
        Losung für Samstag, 22. Januar 2005
        Dazu habe ich Abraham auserkoren, dass er seinen Kindern befehle und seinem Hause nach ihm, dass sie des Herrn Wege halten und tun, was recht und gut ist. (1. Mose 18,19)
        Paulus schreibt: Man fordert nicht mehr von den Haushaltern, als dass sie für treu befunden werden. (1. Korinther 4,2)
        (Losungslink)
        1. Hallo Götz,

          Der Code lautet also dann folgendermaßen:
          // ...
          $Instanzname=>letzteAktion();
          unset($Instanzname);
          // weiterer Code...

          Müßte es nicht $Instanzname->letzteAktion(); heißen?
          (Siehe auch PHP Manual: Chapter 18. Classes and Objects (PHP 4))

          Ja, daran merkt man doch dass ich langsam alt werde. Habe in letzter Zeit zuviel mit assoziativen Arrays gearbeitet... ;-)

          Bis dann!

          Marc Reichelt || http://www.marcreichelt.de/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
          http://emmanuel.dammerer.at/selfcode.html
          1. Hi Marc,

            Ja, daran merkt man doch dass ich langsam alt werde. Habe in letzter Zeit zuviel mit assoziativen Arrays gearbeitet... ;-)

            zu viel Allgemeine Informatik I? Das Softwarepraktikum wird noch viel spaßiger... ;-)

            Viele Grüße
             Benjamin

            1. Hallo Benjamin,

              Ja, daran merkt man doch dass ich langsam alt werde. Habe in letzter Zeit zuviel mit assoziativen Arrays gearbeitet... ;-)

              zu viel Allgemeine Informatik I? Das Softwarepraktikum wird noch viel spaßiger... ;-)

              Allgemeine Informatik I? *lol*
              Für die ist PHP doch ein Fremdwort!
              Im Softwarepraktikum soll es wenigstens _anspruchsvolle_ Programmierung geben (es wird ja soweit ich weiß eine Software für eine Bierbrauerei geschrieben...)

              Na mal sehen, jedenfalls habe ich das gesamte Skript mal durchgeblättert und dann gemerkt, dass für mich nichts wirklich neues kommt - trotzdem gehe ich immer in die Vorlesung und in die Übung, denn das ist für mich ein wenig entspannend... :-D

              Bis dann, wann bist du eigentlich mal wieder in der Uni?

              Marc Reichelt || http://www.marcreichelt.de/

              --
              Linux is like a wigwam - no windows, no gates and an Apache inside!
              SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
              http://emmanuel.dammerer.at/selfcode.html
              1. Hi Marc,

                Im Softwarepraktikum soll es wenigstens _anspruchsvolle_ Programmierung geben (es wird ja soweit ich weiß eine Software für eine Bierbrauerei geschrieben...)

                nicht unbedingt wahnsinnig anspruchsvoll, aber einfach unglaublich zeitaufwendig... da das Framework mehr oder weniger miserabel dokumentiert und buggy ist (war?).

                Bis dann, wann bist du eigentlich mal wieder in der Uni?

                Och. Ich werde wohl zu ein paar Klausuren da sein. ;-) Und evtl. nächste Woche mal.

                Viele Grüße
                 Benjamin

  2. Hello,

    was mir dabei nur nicht kalr ist, wie PHP dann nach der Selbstzerstörung des Objektes den "Befehlszeiger" wieder positionieren soll, da die Rücksprungadresse dann ja gelöscht wäre.

    Da die Ausführung aber ohnehin von einer Runtime-Maschine durchgeführt wird, könnte die natürlich den nächten ereichbaren Aufsetzpunkt verwenden, oder?

    Willst Du eigentlich die Obkjektdefinition oder die Instanz loswerden oder sogar beide?

    In der OOP wäre sonst doch der Destruktor zuständig für derartige Aufgaben. Der nimmt dann auch Rücksicht auf oben gesagtes (Aufräumen des Befehlsstapels)

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau