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