• unset( $this ) – Es war einmal

    von Nils Langner am 8. November 2008

    Ich liebe die PHP Gemeinde, denn auf sie ist verlass. Naja war verlass, aber heute habe ich mal wieder einen netten Bug in PHP gefunden. Der ist zwar für PHP 4 eingetragen worden, lustig ist er aber trotzdem. Also irgendjemand hat sich beschwert, dass es in PHP 5 nicht mehr funktioniert unset( $this ) zu verwenden. Komisch, komisch. Dabei ist die Sache doch so nützlich, wenn man zum Beispiel ein Loch im Raum-Zeit-Kontinuum programmieren muss. Also ich wüsste sonst leider keinen weiteren Anwendungsfall.

    PHP 5 verhindert dies zum Glück jetzt. Danke PHP Core-ler. Dummerweise muss ich zugeben, dass ich in einem alten Stück Source Code, der nicht von mit stammt, auch wenn es mir bestimmt niemand glaubt, etwas ähnliches gefunden habe. Ist zwar ein wenig anders, aber schöner ist es auch nicht. Und zwar stand im Code so etwas wie:

    $this = new SomeObject;

    Ich sag da mal jetzt nichts zu. PHP4 hat auch dies zugelassen, aber wir tun das mal unter Jugendsünden ab und vergessen die Sache und leben wieder in der Gegenwart.

    Nils Langner Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    8 Kommentare »


    • voo
      am 8. November 2008 um 08:50 Uhr

      unset( $this ); war doch nur ein workaround, bis sie

      __selfdestruct(){}

      eingeführt hatten.


    • Nils
      am 8. November 2008 um 10:16 Uhr

      war es nicht __selfdestruct( $countdown ); ? Dann kann man noch die Sekunden angeben, wie lange es noch “lebt”.


    • danielj
      am 8. November 2008 um 12:20 Uhr

      mein Lieblings-$this-Konstrukt ist immer noch
      $this = false;
      im Konstruktor. Bietet (bzw. bat) immerhin eine willkommene Gelegenheit mal wieder den Cluebat auszupacken :)


    • admin
      am 8. November 2008 um 16:42 Uhr

      Konnte man damit wirklich $this auf false setzen? Unglaublich!


    • Johannes
      am 11. November 2008 um 00:30 Uhr

      Wie hätte man sonst in nem ctor einen Fehler an die Anwendung geben können sollen? So ohne Exceptions. Bei gutem Code musste man mit PHP 4 nach dem ctor immer erst noch eine “init” Methode haben, wenn man $this-Überschreiben nicht wollte …

      Wobei ich denke, dass dieses Feature nicht beabsichtigt war sondenr Konsequenz der PHP 4-Implementierung war das dann später dafür missbraucht wurde.

      Und wer böses in PHP 5 will:

      bar();
      ?>

      Wobei das, im Gegensatz zum “Original” aus PHP 4 keine Wirkung auf die “äußere” Objektvariable hat. $f ist also weiterhin ein Objekt vom Typ Foo.

      (Reminder: ein ctor hat keinen Rückgabewert, bzw. in PHP einen der vom new-Operator ignoriert wird)


    • Johannes
      am 11. November 2008 um 00:31 Uhr

      Hm, der Kommentar is irgendwie kaputt gegangen … Hier nochmal der Code, mal ohne öffnenden PHP-Tag:

      class Foo {
      public function bar() {
      $tmp = &$this;
      $tmp = 42;
      var_Dump($this);
      }
      }
      $f = new Foo();
      $f->bar();


    • Jan D.
      am 12. November 2009 um 12:59 Uhr

      Ob es aber sinnvoll ist unset( $this ) zu verbieten … naja ob es sinnvoll ist oder nicht sei mal dahingestellt aber naja wenn es auch singletons usw. gibt … “return new self;” ich finde dann gehört die methode unset( $this ) auch i-wie zu den möglichkeiten, wie gesagt ob die verwendung sinnvoll ist sei mal dahingestellt.


    • Nils Langner
      am 12. November 2009 um 13:04 Uhr

      @Jan: AUch bei singletons mach sowas keinen Sinn, da du auf statischen Methoden hantierst und dort kein this existiert. Andere Fälle wären wohl falsch im Sinne der Singletons angewendet.

    RSS-Feed für Kommentare zu diesem Artikel. TrackBack-URL

    Einen Kommentar hinterlassen

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.