+4

PHP 5.3 parte 2: Late Static Bindings

criado por Douglas V. Pasqua em 12/12/2009 1:47pm
A resolução de “Late static bindings” não acontece para chamadas staticas completas, usando o nome da classe. Exemplo de uma chamada statica usando o nome completo: A::foo();. Veja o código abaixo:

<?php
class A {
  public static function foo() {
    static::who();
  }
  public static function who() {
    echo __CLASS__."\n";
  }
}

class B extends A {
  public static function test() {
    A::foo(); // Para essa chamada não acontece resolução de Late Static Bindings
    parent::foo();
    self::foo();
  }
  public static function who() {
    echo __CLASS__."\n";
  }
}

class C extends B {
  public static function who() {
    echo __CLASS__."\n";
  }
}
C::test();

Segue o resultado do código acima:

A
C
C

Podemos concluir no exemplo anterior que:

* A::foo() não acontece a resolução de “Late static bindings”, mesmo usando a palavra-chace static:: dentro da função foo(). O nome da classe exibida é aquela no qual a função who() pertence, ou seja, classe A.
* Para parent::foo() e self::foo() já acontece a resolução de “Late static bindings”. Portanto o nome da classe exibida é aquela que foi chamada em tempo de execução, ou seja, classe C.

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.)