Introduzione
PHP consente di sovraccaricare le chiamate ai metodi e accessi alle proprietà di dichiarando 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 dell'istanza, dal PHP 5.3.0 possiamo anche sovraccaricare i metodi static
chiamate sovrascrivendo il metodo magico __callStatic
.
Manca qualcosa
Ciò che manca vistosamente dalle funzionalità disponibili è la possibilità di sovraccaricare proprietà statiche , ad esempio:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Questa limitazione è chiaramente documentato :
Property overloading only works in object context. These magic methods will not be triggered in static context. Therefore these methods should not be declared
static
. As of PHP 5.3.0, a warning is issued if one of the magic overloading methods is declaredstatic
.
Ma perché?
Le mie domande sono:
- C'è una ragione tecnica per cui questa funzionalità non è attualmente supportata? O forse una ragione politica (rabbrividente)?
- Sono stati interrotti i tentativi di aggiungere questa funzionalità in passato?
Soprattutto, la domanda non è "come posso avere proprietà statiche dinamiche in userland PHP?". Detto questo, se sei a conoscenza di un'implementazione particolarmente carina basata su __callStatic
che desideri condividere, fallo assolutamente.