Introdução
O PHP permite sobrecarregar chamadas de métodos e acessos de propriedades , declarando métodos mágicos nas classes. Isso permite códigos como:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Além de sobrecarregar as propriedades e métodos da instância, desde o PHP 5.3.0 também podemos sobrecarregar as static
chamadas de métodos, substituindo o método mágico __callStatic
.
Algo faltando
O que está conspicuamente faltando na funcionalidade disponível é a capacidade de sobrecarregar propriedades estáticas , por exemplo:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Esta limitação está claramente documentada :
A sobrecarga de propriedade funciona apenas no contexto do objeto. Esses métodos mágicos não serão acionados em contexto estático. Portanto, esses métodos não devem ser declarados
static
. A partir do PHP 5.3.0, um aviso é emitido se um dos métodos mágicos de sobrecarga for declaradostatic
.
Mas por que?
Minhas perguntas são:
- Existe um motivo técnico para que essa funcionalidade não seja suportada atualmente? Ou talvez uma razão política (estremecer)?
- Houve alguma tentativa abortada de adicionar essa funcionalidade no passado?
Mais importante ainda, a questão não é "como posso ter propriedades estáticas dinâmicas no PHP do usuário?". Dito isto, se você conhece uma implementação especialmente interessante com base na __callStatic
qual deseja compartilhar, faça isso de qualquer maneira.
__getStatic()
e__setStatic()
nas classes estáticas , ainda assim seria útil ter essa funcionalidade para classes instantâneas. Você está ciente de algum movimento nessa direção?