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.