+4

PHP 5.3 parte 2: Late Static Bindings

criado por Douglas V. Pasqua em 12/12/2009 1:47pm
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:

<?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

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)