Родительский класс в другой директории и функция __autoload()

Запутался с классами в php. Есть например два класса

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 'это внутренняя функция не доступна контроллеру!';
    }
}

первый класс лежит в /classes/dir1/, а второй класс лежит в /classes/dir2/

как подключать их функцией __autoload?

function __autoload($class_name){
    if(file_exists('classes/dir2/'.$class_name.'.class.php'))
        require_once 'classes/dir2/'.$class_name.'.class.php';
}

$module=new ExampleModule();
$module->buildPage(isset($_GET['action'])?$_GET['action']:'');
1 ответ

if(file_exists('classes/dir2/'.$class_name.'.class.php'))
    require_once 'classes/dir2/'.$class_name.'.class.php';

Аналогичный код нужно будет написать и для dir1. Хотя не знаю к чему эти директории, почему бы не хранить всё в /classes ?

Ну и конечно же, autoload должен быть подключен к запущенному скрипту. Ну т.е. есть допустим index.php, то autoload должен быть определен либо в нём либо в каком-либо подключаемом к index.php файле.

licensed under cc by-sa 3.0 with attribution.