Statischen Aufruf von Instanzaufruf unterscheiden … geht nicht

4 Kommentare

Gerade hatte ich die Idee mit „if(isset($this))“ zu unterscheiden, ob eine statische Method über die Klasse oder über ein Objekt aufgerufen wurde.
Beispiel:

class Foo {
    public static function bar() {
        if (isset($this)) {
            echo "i am an object. ";
        } else {
            echo "this is a static call. ";
        }
    }
}

// beispiel verwendung
Foo::bar();
$f = new Foo();
$f->bar();

Erwartet hatte ich, dass dabei „this is a static call. i am an object. “ rauskommt, das war aber nicht der Fall. In beiden Fällen wird „this is a static call. “ ausgegeben.
Das bedeutet also, dass eine statische Methode immer statisch aufgerufen wird, selbst wenn der Aufruf über ein Objekt stattfindet.

Advertisements

ich hab die wurzel gesehn: php2

3 Kommentare

Hatte grade die Idee, mal zu schauen, wie denn der erste PHP Code ausgesehen hat. PHP1 Code hab ich leider nicht gefunden. Vielleicht gab es diese Version auch nie – keine Ahnung, hab mich nicht ausführlich erkundigt.
Hab aber Hinweise für eine Migration von PHP2 nach PHP3 gefunden. :D Auf der Seite sind einige Code Beispiele verlinkt.