Intro
Mit PHP können Sie Methodenaufrufe und Eigenschaftenzugriffe überladen, indem Sie magische Methoden in Klassen deklarieren . Dies ermöglicht Code wie:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Neben dem Überladen von Instanzeigenschaften und Methoden können wir seit PHP 5.3.0 auch static
Methodenaufrufe überladen, indem wir die magic-Methode überschreiben __callStatic
.
Etwas fehlt
Was in der verfügbaren Funktionalität auffällig fehlt, ist die Fähigkeit, statische Eigenschaften zu überladen , zum Beispiel:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Diese Einschränkung ist eindeutig dokumentiert :
Das Überladen von Eigenschaften funktioniert nur im Objektkontext. Diese magischen Methoden werden im statischen Kontext nicht ausgelöst. Daher sollten diese Methoden nicht deklariert werden
static
. Ab PHP 5.3.0 wird eine Warnung ausgegeben, wenn eine der magischen Überladungsmethoden deklariert iststatic
.
Aber wieso?
Meine Fragen sind:
- Gibt es einen technischen Grund dafür, dass diese Funktionalität derzeit nicht unterstützt wird? Oder vielleicht ein (schauderhafter) politischer Grund?
- Wurden in der Vergangenheit Versuche abgebrochen, diese Funktionalität hinzuzufügen?
Vor allem ist die Frage nicht "Wie kann ich dynamische statische Eigenschaften in userland PHP haben?". Das heißt, wenn Sie eine besonders nette Implementierung kennen, die darauf basiert, __callStatic
dass Sie teilen möchten, dann tun Sie dies auf jeden Fall.
__getStatic()
und__setStatic()
für statische Klassen vorzuschlagen scheint , wäre es dennoch nützlich, diese Funktionalität für instanziierbare Klassen zu haben. Sind Ihnen Bewegungen in diese Richtung bekannt?