За последние 24 часа нас посетили 32814 программистов и 1819 роботов. Сейчас ищут 826 программистов ...

Вызов метода дочернего класса в родительском

Тема в разделе "PHP для новичков", создана пользователем 2misha, 20 мар 2016.

  1. 2misha

    2misha Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    17
    Симпатии:
    0
    Здравствуйте. Подскажите, пожалуйста, как в родительском классе вызвать метод из дочернего? Для этого обязательно определять его в родительском а потом переопределять в дочернем или нет?
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Вообще, очень желательно. Потому что родительский класс не должен знать, что у него существует дочерний. Но технически - необязательно, потому что php весь такой динамический. denis01, ему parent не катит, он хочет наоборот делать.
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Вообще, не обязательно переопределять. Ты можешь имеет там другие методы которых нету в родительком, на то он дочерний класс, что может расширяться. А можно определить с тем же именем и это не приведет к ошибке.
    Можно в качестве параметра функции объект дочернего класса.
    Код (PHP):
    1. class A{
    2.     public function test($b){
    3.         echo '<pre>';
    4.         var_dump($b);
    5.         echo "</pre>";
    6.         echo __CLASS__."<br>";
    7.         echo $b->test();
    8.     }
    9. }
    10.  
    11. class B extends A{
    12.     public function test() {
    13.         echo __CLASS__;
    14.     }
    15. }
    16. $a = new A();
    17. $a->test(new B());
    Этот подход применителем к любому объекту любого класса. Не обязательно чтобы он наследовался.
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    mahmuzar, это не очень хорошо, когда родительский класс знает о потомках. Иногда это делается, но лучше избегать
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    mkramer, согласен.

    Добавлено спустя 13 минут 52 секунды:
    Так то в этом примере он не то чтобы знает о дочерном классе, он знает о типе B. С тем же успехом можно указать туда тип C если мы собираемся с ним работать.

    Если есть желание чтобы были актуальны все объекты всех наследуюмых классов, то можно указать тип A в итоге можно передавать любой объект дочерного класса, остальные будут отсекаться.
     
  7. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    2misha какая задача? Зачем так делать?