Introducción
PHP le permite sobrecargar las llamadas de método y accesos de propiedad por declarando métodos mágicos en las clases. Esto habilita código 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 instancia, desde PHP 5.3.0 también podemos sobrecargar las llamadas a los métodos static
invirtiendo el método mágico __callStatic
.
Falta algo
Lo que falta notoriamente en la funcionalidad disponible es la capacidad de sobrecargar propiedades estáticas , por ejemplo:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Esta limitación está claramente documentado :
La sobrecarga de propiedades solo funciona en el contexto del objeto. Estos metodos magicos no se activará en el contexto estático. Por lo tanto estos métodos No debe ser declarado
static
. A partir de PHP 5.3.0, se emite una advertencia si uno de los métodos de sobrecarga mágica se declarastatic
.
Pero ¿por qué?
Mis preguntas son:
- ¿Hay alguna razón técnica por la que esta funcionalidad no es compatible actualmente? ¿O quizás una razón política (estremecedor)?
- ¿Ha habido intentos fallidos de agregar esta funcionalidad en el pasado?
Lo más importante es que la pregunta no es "¿cómo puedo tener propiedades estáticas dinámicas en PHP de la zona de usuario?". Dicho esto, si conoces una implementación especialmente linda basada en __callStatic
que quieras compartir, hazlo por todos los medios.