За последние 24 часа нас посетили 51814 программистов и 1756 роботов. Сейчас ищут 1689 программистов ...

Туплю с наследованием

Тема в разделе "PHP для новичков", создана пользователем [pandora], 30 июн 2017.

  1. [pandora]

    [pandora] Активный пользователь

    С нами с:
    18 сен 2012
    Сообщения:
    71
    Симпатии:
    1
    PHP:
    1. <?php
    2.    
    3. class MyClass {
    4.  
    5.    protected function myFunct() {
    6.      echo "MyClass::myFunc()\n";
    7.    }
    8. }
    9.  
    10. class OtherClass {
    11.  
    12.    public function myFunc() {
    13.  
    14.      parent::MyClass();
    15.      echo "OtherClass::myFunc()\n";
    16.    }
    17. }
    18.  
    19. $class = new OtherClass();
    20. $class->myFunc();
    21.    
    22. ?>
    Подскажите могу ли я вызвать parent::MyClass(); через OtherClass . не делая OtherClass наследником MyClass? То есть не далая вот так: И если могу то как? Напишите пожалуйста код.


    PHP:
    1. class OtherClass extends MyClass {
    2.  
    3.    /* Override parent's definition */
    4.    public function myFunc() {
    5.  
    6.      /* But still call the parent function */
    7.      parent::myFunct();
    8.      echo "OtherClass::myFunc()\n";
    9.    }
    10. }
     
  2. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    Так если его не делать наследником, то и parent'а не будет.
    А протектед запрещает вызывать класс вне текущего класса и его наследников.
    Т.е. обязательно надо наследовать. Либо делать MyClass::myFunc() public
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    В этом и идея protected :)
     
  4. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    А что не устраивает в наследовании тогда?
     
  5. [pandora]

    [pandora] Активный пользователь

    С нами с:
    18 сен 2012
    Сообщения:
    71
    Симпатии:
    1
    @valentinnew В наследовании всё устраивает. Я просто не обратила внимание, что функция протектед. А мне надо было вызвать функцию myFunct() из класса MyClass. Вот так как внизу вообщем. Спасибо)

    PHP:
    1. <?php
    2.  
    3. class MyClass {
    4.    public function myFunct() {
    5.      echo "MyClass::myFunc()\n";
    6.    }
    7. }
    8. class OtherClass {
    9.    public function myFunc() {
    10.      MyClass::myFunct();
    11.      echo "OtherClass::myFunc()\n";
    12.    }
    13. }
    14. $class = new OtherClass();
    15. $class->myFunc();
    16.  
    17.  
    18. ?>
    @mkramer спасибо, до меня дошло)
    --- Добавлено ---
    А, и ещё вопрос: Получается мы не можем вызвать функцию из другого класса если она protected? Её обязательно сделать наследником, так? Такова концепция?
     
  6. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Да
    Да
     
  7. [pandora]

    [pandora] Активный пользователь

    С нами с:
    18 сен 2012
    Сообщения:
    71
    Симпатии:
    1
    @[vs] спасибо.