Работаю над 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); }
private, public и рrotected. private могут быть вызваны только самим классом, public могут вызываться всеми, protected могут вызываться самим классом или дочерними классами. private не наследуется.
Спасибо. Это примерно то же, что я и обнаружил путём экспериментов. Надо в дочернем классе вместо private использовать protected. Думаю, что тема закрыта.