O Late Static Binding existe a partir do PHP 5.3 e a maioria das explicações não são muito claras e por isso essa funcionalidade fica meio na... nuvem!
ENTENDEU?
Esta definição apesar de palavras bem usadas no nosso dia a dia não deixou muito claro a sua finalidade e ai ficamos muuito confusos... Felizmente esse é o tipo de conceito que não se entra na cabeça de "prima" e para ajudar a documentação do PHP tem bastante exemplo.
Chega de papo, a melhor forma de entender isso é vendo o CÓDIGO!
- class classePai {
- public static function normalCall() {
- self::calledMethod();
- }
- public static function lateStaticCall() {
- static::calledMethod();
- }
- public static function calledMethod() {
- echo " Chamada na classe PAI \n";
- }
- }
- class classeFilha extends classePai {
- public static function calledMethod() {
- echo "Chamada na classe Filha \n";
- }
- }
Veja bem, temos a classeFilha que extende da classePai...
Na classePai temos 3 métodos estáticos, normalCall, lateStaticCall e calledMethod na classe filha temos apenas um método estático o calledMethod
Percebam que tanto na filha quanto na pai temos a classe calledMethod certo?
Pois bem, se chamarmos o método estático normalCall tanto com a classe filha como a pai o resultado seria Chamada na classe PAI veja um pequeno exemplo do uso.
- classePai::normalCall(); // Chamada na classe PAI
- classeFilha::normalCall(); // Chamada na classe PAI
Ou seja, independente de chamar o método estático na filha ou na pai a função que a classe normalCall irá chamar sempre será a calledMethod da classe pai, pois é isso que o self esta fazendo.
Agora, se fizermos a mesma coisa mais trocando o self por static que é como esta implementado no método lateStaticCall a chamada seria diferente pois o Late Static Binding estaria em ação, veja:
- classePai::lateStaticCall(); // Chamada na classe PAI
- classeFilha::lateStaticCall(); // Chamada na classe Filha
Fonte: PHP.net (como sempre, rs)