Это сложный вопрос.
Я "эмулирую" ZF Bootstrapping (внешний вид поверхности).Не спрашивайте меня почему, называйте это академическим интересом.Итак, у меня есть Bootstrap Abstract с методом «run», который перебирает себя, чтобы найти любые методы с префиксом «init».
Приложение ищет определенный пользователем класс, который расширяет этот класс, в котором пользователь может определить любое количество методов таким способом.Тем не менее, я хочу запретить пользователю выполнять команду «run» своего родительского класса, в то же время предоставляя ту же команду для клиентского кода.
class Bootstrap_Abstract{
protected final function run(){
// if method exists that starts 'init' - execute the method
}
}
class Bootstrap extends Bootstrap_Abstract(){
public function initSomething(){
//do something
}
//PREVENT THIS
public function initRun(){
$this->run();
}
}
//application code, not exposed to user - changes in behaviour require changes in this code directly
class Application(){
$Bootstrap = new Bootstrap();//load user bootstrap
$Bootstrap->run();
}