<?
abstract class Module {
public final function buildPage($action) {
do{
//нельзя вызвать функции, начинающиеся с подчеркивания
//(общепринятое соглашение считать их приватными)
if (substr($action, 0, 1) == '_' or empty($action))
break;
//нельзя вызвать функции описанные в абстрактном классе, они для работы системы
if (method_exists(__CLASS__, $action))
break;
if (!method_exists($this, $action))
break;
$method = new ReflectionMethod($this, $action);
//доступны только публичные методы
if (!$method->isPublic())
break;
return $this->$action();
}while(false);
return $this->error404();
}
public function error404(){
echo 'такой страницы нет в системе';
}
}
class ExampleModule extends Module{
function hello(){
echo 'hello World!';
}
function test(){
echo 'Тест!!!';
}
protected function inner(){
echo 'это внутренняя функция не доступна контроллеру!';
}
}
$module=new ExampleModule();
$module->buildPage(isset($_GET['action'])?$_GET['action']:'');
?>