[PHP] Was ist eigentlich … Late Static Binding?

Was Namespaces sind, hat uns Manuel in seinem Beitrag über PHP 5.3 schon sehr gut erklärt, aber was hat es mit dem neuen Feature Late Static Binding auf sich?
Genau das möchte ich euch hier kurz etwas näher bringen.
Sehen wir uns zunächst folgendes Beispiel an:
<?
class ParentClass {
public static function whoAmI() {
echo __CLASS__;
}
public static function foo() {
self::whoAmI();
}
}
class ChildClass extends ParentClass {
public static function whoAmI() {
echo __CLASS__;
}
}
ChildClass::foo(); // Gibt "ParentClass" aus
?>
Da der PHP Interpreter bei statischen Aufrufen die Referenz zur aktuellen Klasse erst beim Kompilieren des Skripts bestimmt, verweisen __CLASS__ und self auf die Klasse, in der sich die entsprechende Methode befindet. Das heißt aus self::whoAmI() wird ParentClass::whoAmI(). Das ist leider ziemlich hinderlich und wurde nun endlich in PHP 5.3 gefixed.
Die Lösung lautet: Late Static Binding oder kurz “lsb“.
