За последние 24 часа нас посетили 169042 программиста и 2008 роботов. Сейчас ищут 1202 программиста ...

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

Тема в разделе "PHP для новичков", создана пользователем Gromo, 24 май 2010.

  1. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Работаю над MVC системой, где все контроллеры наследуются от одного базового класса.
    Есть два способа вызова методов других контроллеров - из основного потока и из других контроллеров.

    Необходимо запретить явный вызов private методов из основного потока,
    но при этом разрешить вызов из-под других контроллеров.

    Написал примерный код, где BaseA - базовый класс, ChildB - один из контроллеров.
    Не удаётся вызвать private метод дочернего класса.

    Как заставить ЭТО работать? Или может есть другое решение?




    class BaseA {

    public function call($method) {
    $this->$method();
    }
    }

    class ChildB extends BaseA {
    private function alert() {
    echo 'alert called';
    }
    }

    $obj = new ChildB();
    $obj->call('alert');




    Если из класса BaseA вызвать следующий код, то он укажет, что вызов был сделан из дочернего класса.
    Однако вызов метода дочернего опять же не срабатывает.


    public function call($method) {
    echo get_class($this);
    }
     
  2. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    private, public и рrotected.
    private могут быть вызваны только самим классом, public могут вызываться всеми, protected могут вызываться самим классом или дочерними классами. private не наследуется.
     
  3. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Спасибо. Это примерно то же, что я и обнаружил путём экспериментов.

    Надо в дочернем классе вместо private использовать protected.


    Думаю, что тема закрыта.
     
  4. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    в твоем случае только паблик