Intro
PHP ti consente di sovraccaricare le chiamate ai metodi e gli accessi alle proprietà dichiarando i metodi magici nelle classi. Questo abilita codice come:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Oltre a sovraccaricare le proprietà e i metodi delle istanze, da PHP 5.3.0 possiamo anche sovraccaricare le static
chiamate ai metodi ignorando il metodo magico __callStatic
.
Manca qualcosa
Ciò che manca in modo evidente alla funzionalità disponibile è la capacità di sovraccaricare le proprietà statiche , ad esempio:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Questa limitazione è chiaramente documentata :
Il sovraccarico delle proprietà funziona solo nel contesto dell'oggetto. Questi metodi magici non verranno attivati in un contesto statico. Pertanto, questi metodi non devono essere dichiarati
static
. A partire da PHP 5.3.0, viene emesso un avviso se viene dichiarato uno dei metodi di sovraccarico magicostatic
.
Ma perché?
Le mie domande sono:
- C'è una ragione tecnica per cui questa funzionalità non è attualmente supportata? O forse un (brivido) motivo politico?
- Ci sono stati tentativi interrotti di aggiungere questa funzionalità in passato?
Ancora più importante, la domanda non è "come posso avere proprietà statiche dinamiche in PHP userland?". Detto questo, se conosci un'implementazione particolarmente carina basata su __callStatic
quella che vuoi condividere, allora fallo.
__getStatic()
e__setStatic()
sulle classi statiche , sarebbe comunque utile disporre di questa funzionalità per le classi istantanee. Sei a conoscenza di eventuali mosse in questa direzione?