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: