©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
PHP’s „Late Static Binding“ (LSB) ist ein mächtiges, aber oft missverstandenes Konzept. Dieser Artikel entschlüsselt die Terminologie und zeigt anhand praktischer Beispiele, warum die Bezeichnung „statisch“ historisch bedingt ist – und wie PHP 8.5 finale Klassen dabei smarter macht.
LSB ermöglicht den Zugriff auf den zur Laufzeit aufgerufenen Klassekontext – nicht auf die Klasse, in der die Methode definiert wurde.
Beispiel:
class A {
public static function getClass(): string {
return static::class; // Späte Bindung
}
}
class B extends A {}
echo B::getClass(); // "B" (nicht "A"!)
Hier löst static::class
erst zur Laufzeit auf, während self::class
immer A
zurückgeben würde.
Der Name ist historisch geprägt:
static
, nicht auf statische Methoden!Historischer Kontext:
self
und parent
.static
-Keyword wiederverwendet, statt neuer Schlüsselwörter wie late
oder called
.Finale Klassen werfen interessante Fragen auf:
interface Factory {
public static function create(): static;
}
final class Product implements Factory {
public static function create(): self { // ← self vs static
return new self();
}
}
Problem:
PHP 8.5-Lösung:
Mit PR #17724 wird self
in finalen Klassen als kompatibel mit static
behandelt.
abstract class Model {
public static function factory(): static {
return new static(); // Instanz der aufrufenden Klasse
}
}
class User extends Model {}
$user = User::factory(); // User-Instanz
class Logger {
protected static string $prefix = '';
public static function log(string $message): void {
error_log(static::$prefix . $message);
}
}
class AuthLogger extends Logger {
protected static string $prefix = '[AUTH] ';
}
AuthLogger::log('Login failed'); // Loggt "[AUTH] Login failed"
Alternativvorschläge (hypothetisch):
class A {
public function foo(): called { /*...*/ } // Vorschlag "called"
public function bar(): late { /*...*/ } // Vorschlag "late"
}
Vorher:
// PHP ≤8.4
final class Config {
public static function load(): self { /*...*/ }
}
// Fehler bei Implementierung von Interfaces mit „static“-Return
Nachher (PHP 8.5+):
static
kompatibel. /**
* @return static // ← Nicht mehr nötig!
*/
Der Begriff „Late Static Binding“ ist ein historisches Artefakt, das sich tief in PHP verwurzelt hat. Trotz der verwirrenden Terminologie ermöglicht LSB mächtige Vererbungsmuster. Mit PHP 8.5 wird die Logik durch die finale Klassen-Optimierung abgerundet.
„Programmiersprachen sind wie Archäologie – manchmal muss man historische Schichten akzeptieren, um die Gegenwart zu verstehen.“
Referenzen:
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten