Wprowadzenie
PHP pozwala przeciążać wywołania metod i dostęp do właściwości , deklarując magiczne metody w klasach. Umożliwia to kod taki jak:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Oprócz przeciążania właściwości i metod instancji, od PHP 5.3.0 możemy również przeciążać static
wywołania metod, zastępując magiczną metodę __callStatic
.
Czegoś brakuje
W widocznej funkcji brakuje wyraźnie możliwości przeciążenia właściwości statycznych , na przykład:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
To ograniczenie jest wyraźnie udokumentowane :
Przeciążanie właściwości działa tylko w kontekście obiektowym. Te magiczne metody nie będą uruchamiane w kontekście statycznym. Dlatego te metody nie powinny być deklarowane
static
. Począwszy od PHP 5.3.0, pojawia się ostrzeżenie, jeśli zadeklarowano jedną z magicznych metod przeciążaniastatic
.
Ale dlaczego?
Moje pytania to:
- Czy istnieje techniczny powód, dla którego ta funkcja nie jest obecnie obsługiwana? A może (dreszcz) powód polityczny?
- Czy w przeszłości podejmowano próby przerwania tej funkcji?
Co najważniejsze, pytanie nie brzmi „jak mogę mieć dynamiczne właściwości statyczne w PHP użytkownika?”. To powiedziawszy, jeśli znasz szczególnie uroczą implementację opartą na __callStatic
tym, którą chcesz się podzielić, to zrób to.
__getStatic()
i__setStatic()
na nich , nadal przydatne byłoby posiadanie tej funkcji dla klas możliwych do utworzenia. Czy zdajesz sobie sprawę z jakichkolwiek ruchów w tym kierunku?