Introducción
PHP le permite sobrecargar llamadas a métodos y accesos a propiedades declarando métodos mágicos en clases. Esto habilita códigos como:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Además de sobrecargar las propiedades y los métodos de la instancia, desde PHP 5.3.0 también podemos sobrecargar las static
llamadas a métodos anulando el método mágico __callStatic
.
Algo falta
Lo que falta notablemente de la funcionalidad disponible es la capacidad de sobrecargar las propiedades estáticas , por ejemplo:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Esta limitación está claramente documentada :
La sobrecarga de propiedades solo funciona en el contexto del objeto. Estos métodos mágicos no se activarán en un contexto estático. Por lo tanto, estos métodos no deben declararse
static
. A partir de PHP 5.3.0, se emite una advertencia si se declara uno de los métodos de sobrecarga mágicastatic
.
¿Pero por qué?
Mis preguntas son:
- ¿Existe alguna razón técnica por la cual esta funcionalidad no sea compatible actualmente? ¿O tal vez una razón política (estremecimiento)?
- ¿Ha habido intentos fallidos de agregar esta funcionalidad en el pasado?
Lo que es más importante, la pregunta no es "¿cómo puedo tener propiedades estáticas dinámicas en PHP y el usuario?". Dicho esto, si conoce una implementación especialmente linda basada en __callStatic
eso que desea compartir, hágalo por todos los medios.
__getStatic()
y__setStatic()
sobre clases estáticas , aún sería útil tener esta funcionalidad para clases instanciables. ¿Eres consciente de algún movimiento en esta dirección?__getStatic()
me permitiría SECAR mucho de mi código existente. ¡Gracias!