Mit ,,später statischer Bindung“ wird ein Konzept bezeichnet, dass eine statische Methode erst zur Ausführungszeit an seine Klasse bindet und nicht vorher. Es ist im folgenden Programmbeispiel zweier Klassen in einer Vererbungshierarchie veranschaulicht:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class ParentClass { public static function foo() { echo ('in ParentClass'); } public static function boo() { self::foo(); // normaler Zugriff static::foo(); // spätes statisches Binden } } class ChildClass extends ParentClass { public static function foo() { echo ('in ChildClass'); } } ChildClass::boo(); ?> |
In der letzten Zeile wird die statische Funktion boo()
in der ChildClass
aufgerufen. Diese definiert in der Klasse ParentClass
einen Aufruf der weiteren statischen Funktion foo()
. Wird nun bei dem Aufruf ohne späte statische Bindung gearbeitet, indem einfach nur self::
genutzt wird, so greift sich der Aufruf die Deklaration der Funktion, die direkt für ihn zugänglich ist. Ein Compiler könnte die statische Funktion foo()
auch direkt in die statische Funktion boo()
einbetten. Es wird in ParentClass
ausgegeben.
Wird nun stattdessen static::
genutzt, so findet ein spätes statisches Binden statt. PHP wird durch die Klassenhierarchie nach oben hin nach der Funktion foo()
suchen und findet zuerst die Funktion in der Klasse ChildClass
. Deshalb ist die Ausgabe jetzt auch in ChildClass
.