PHP 5.3 parte 2: Late Static Bindings
Na primeira parte desta série abordamos a utilização de namespaces. Nessa segunda parte vamos abordar a utilização de “Late Static Bindings” que é um novo recurso incluído à partir da versão 5.3, que por sinal, é muito interessante.
É mais comum o uso de “Late static bindings” em chamadas de métodos staticos em um contexto de herança. Apesar que não ser limitado somente a métodos staticos.
Para melhor entendermos onde se aplica a utilização de “Late static bindings” vamos analisar o código abaixo:
As referências staticas para a classe corrente, como self:: e __CLASS__, são resolvidas para a classe no qual o método esta definido e não para a classe chamada em tempo de execução, que no caso a acima foi a class B, filha da classe A.
Dessa forma a saída da execução do script php anterior será:
Afim de resolver essa limitação foi escolhido uma palavra-chave para que seja possível referenciar a classe que é chamada em tempo de execução ao invés da classe em que o método pertence. A palavra-chave já reservada é static::.
Vamos alterar o script para que possamos acessar o médoto who() na classe B. Perceba que modificamos self:: para static::.
Ao executar o script php anterior, o resultado agora é diferente:
É mais comum o uso de “Late static bindings” em chamadas de métodos staticos em um contexto de herança. Apesar que não ser limitado somente a métodos staticos.
Para melhor entendermos onde se aplica a utilização de “Late static bindings” vamos analisar o código abaixo:
<?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } } class B extends A { public static function who() { echo __CLASS__; } } B::test();
As referências staticas para a classe corrente, como self:: e __CLASS__, são resolvidas para a classe no qual o método esta definido e não para a classe chamada em tempo de execução, que no caso a acima foi a class B, filha da classe A.
Dessa forma a saída da execução do script php anterior será:
A
Afim de resolver essa limitação foi escolhido uma palavra-chave para que seja possível referenciar a classe que é chamada em tempo de execução ao invés da classe em que o método pertence. A palavra-chave já reservada é static::.
Vamos alterar o script para que possamos acessar o médoto who() na classe B. Perceba que modificamos self:: para static::.
<?php class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // static:: no lugar de ::self } } class B extends A { public static function who() { echo __CLASS__; } } B::test();
Ao executar o script php anterior, o resultado agora é diferente:
B
Páginas:
1
2
Novo Comentário: