Sobes.tech
Middle+

Was ist späte statische Bindung in PHP?

sobes.tech KI

Antwort von AI

Dieser Mechanismus ermöglicht es, auf die aufgerufene Klasse im Kontext statischer Aufrufe zu verweisen. Er löst das Problem der Selbstreferenzen in vererbten Klassen bei der Verwendung des Schlüsselworts static::.

Betrachten wir ein Beispiel mit self:::

<?php
class A {
    public static function who() {
        echo __CLASS__; // Gibt A aus
    }
    public static function test() {
        self::who(); // Ruft A::who() auf
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // Gibt B aus
    }
}

B::test(); // Gibt A aus

In diesem Fall ruft self::who() innerhalb der Klasse A immer die Methode who der Klasse A auf, auch wenn der Aufruf von test() aus der Klasse B erfolgt.

Nun betrachten wir ein Beispiel mit static:::

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Ruft who() der Klasse auf, die den Aufruf von test() initiiert hat
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Gibt B aus

Hier referenziert static::who() innerhalb der Klasse A bei einem Aufruf aus der Klasse B auf die Klasse B und ruft die Methode who() der Klasse B auf.

Die späte statische Bindung ermöglicht es, dynamisch zu bestimmen, welche Klasse im Kontext eines statischen Aufrufs verwendet werden soll, abhängig von der tatsächlich aufgerufenen Klasse. Dies ist besonders nützlich beim Arbeiten mit Klassenhierarchien und statischen Methoden, die polymorphisches Verhalten zeigen sollen. Es funktioniert, indem es die "aufgerufene nicht-umgeleitete Klasse" (die letzte Klasse in der Vererbungsreihe, von der aus der statische Aufruf begann) merkt und diese zur Auflösung der static::-Verweise verwendet.