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 Silverlight 3, MySQLDUmper, Doctrine.

t3n
Ausgabe 19

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

PHP Journal
Ausgabe 1/2010

PHP Frameworks optimal nutzen, Workshops für PHP Profis, Typo3 auf dem Weg zu Version 5.