Intro
PHP vous permet de surcharger les appels de méthode et les accès aux propriétés en déclarant les méthodes magiques dans les classes. Cela permet un code tel que:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Outre la surcharge des propriétés et des méthodes d'instance, depuis PHP 5.3.0, nous pouvons également surcharger static
les appels de méthodes en remplaçant la méthode magique __callStatic
.
Quelque chose manque
Ce qui manque manifestement dans les fonctionnalités disponibles, c'est la possibilité de surcharger les propriétés statiques , par exemple:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Cette limitation est clairement documentée :
La surcharge de propriété ne fonctionne que dans le contexte de l'objet. Ces méthodes magiques ne seront pas déclenchées dans un contexte statique. Par conséquent, ces méthodes ne doivent pas être déclarées
static
. Depuis PHP 5.3.0, un avertissement est émis si l'une des méthodes de surcharge magique est déclaréestatic
.
Mais pourquoi?
Mes questions sont:
- Y a-t-il une raison technique pour laquelle cette fonctionnalité n'est pas actuellement prise en charge? Ou peut-être une raison politique (frémissante)?
- Y a-t-il eu des tentatives avortées d'ajouter cette fonctionnalité dans le passé?
Plus important encore, la question n'est pas "comment puis-je avoir des propriétés statiques dynamiques dans PHP userland?". Cela dit, si vous connaissez une implémentation particulièrement mignonne basée sur ce __callStatic
que vous souhaitez partager, faites-le par tous les moyens.
__getStatic()
et__setStatic()
sur les classes statiques , il serait toujours utile d'avoir cette fonctionnalité pour les classes instanciables. Êtes-vous au courant de mouvements dans cette direction?__getStatic()
me permettrait de sécher beaucoup de mon code existant. Merci!