За последние 24 часа нас посетили 17819 программистов и 1642 робота. Сейчас ищут 1277 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем GutsOut, 4 окт 2014.

  1. GutsOut

    GutsOut Новичок

    С нами с:
    20 ноя 2013
    Сообщения:
    22
    Симпатии:
    0
    Здравствуйте,
    Код (PHP):
    1. <?php
    2.  
    3. class A {
    4.  
    5.     public static function foo() {
    6.         static::who();
    7.     }
    8.  
    9.     public static function who() {
    10.         echo __CLASS__;
    11.     }
    12. }
    13.  
    14. class B extends A {
    15.     public static function test() {
    16.         A::foo();
    17.         parent::foo();
    18.         static::foo();
    19.     }
    20.  
    21.     public static function foo() {
    22.         echo __CLASS__;
    23.     }
    24. }  
    25.  
    26. class C extends B {
    27.     public static function who() {
    28.         echo __CLASS__;
    29.     }
    30. }
    31.  
    32. C::test(); //ACB
    33.  
    34.  
    Почему выводит третий результат "B", хоть убей, не пойму, я ожидаю "C". Может кто нить на пальцах объяснить?
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    да, в классе C отсутствует метод foo =)
    =>
    Код (Text):
    1. static::who();
    ACC

    Добавлено спустя 2 минуты 12 секунд:
    либо переопредели B::foo()
    Код (Text):
    1.     public static function foo() {
    2.         static::who();
    3.     }
    скорее всего ты имел ввиду имено это.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Полиморфизм надо через экземпляры классов реализовывать. Что же вы все их так не любите... :(((