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

===== Ограничения self:: =====

<code php>
<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>
</code>

**Ответ:** A

===== Использование позднего статического связывания =====

<code php>
<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who();
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
?>
</code>

**Ответ:** B

<note important>
В нестатическом контексте вызванным классом будет тот, к которому относится экземпляр объекта. Поскольку $this-> будет пытаться вызывать закрытые методы из той же области действия, использование static:: может дать разные результаты. Другое отличие в том, что static:: может ссылаться только на статические поля класса.</note>

**Подробно:** http://ru2.php.net/manual/ru/language.oop5.late-static-bindings.php