PHP 5.3 parte 2: Late Static Bindings
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:
Segue o resultado do código acima:
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.
<?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.
Páginas:
1
2
Novo Comentário: