Позднее статическое связывание в PHP
http://belarusweb.net
Основы создания сайтов

Позднее статическое связывание

В PHP статические ссылки на текущий класс, такие как self::, вычисляются исходя из области видимости того класса, в котором они были определены, а не вызваны. Поэтому при наследовании методов с такими ссылками может возникнуть ситуация, когда нужно будет использовать область видимости класса-потомка, вызывающего данный метод, а не область видимости родительского класса. Для таких случаев предусмотрена возможность позднего статического связывания, заключающаяся в использовании вместо конструкции self:: специальной конструкции static::, которая отслеживает и ссылается на текущую область видимости (см. пример 6.22).

<?php
class A{
	public static function my_func_1(){
      echo 'Класс А'.'<br>';
   }
   public static function my_func_2(){
      self::my_func_1();
   }
}

class B extends A {
    public static function my_func_1(){	//Переопределяем метод
        echo 'Класс B'.'<br>';
    }
}

B::my_func_2(); //Выведет 'Класс А', т.к. функция my_func_2 использует  
					 //статическую ссылку self::, которая использует область видимости
					 //того класса, в котором она была определена, а не используется

//Используем позднее статическое связывание					 
class C{
	public static function my_func_1(){
      echo 'Класс C';
   }
   public static function my_func_2(){
      static::my_func_1();
   }
}

class D extends C {
    public static function my_func_1(){	//Переопределяем метод
        echo 'Класс D';
    }
}

D::my_func_2();//Выведет 'Класс D', т.к. функция my_func_2 использует позднее
					//статическое связывание при помощи ссылки static::, которая использует 
					//область видимости класса, в котором она используется, а не определена
?> 

Пример 6.22. Использование позднего статического связывания

Конструкция static::, использующаяся для позднего статического связывания, предназначена для ссылки на статические поля (т.е. свойства и методы) класса. Поэтому, во избежание получения результатов отличных от ожидаемых, не следует использовать ее в нестатическом контексте.