__Autoload () входит в основной класс? - PullRequest
1 голос
/ 26 января 2011

Я новичок в классе, так что извините, если это злой вопрос нуба.

JMC - мой основной класс.Другие классы названы как JMC_files или JMC_array.Я хочу использовать автозагрузку.Идет ли функция автозагрузки внутри моего основного класса или вне этого класса?Так что для визуального, я должен сделать это:

class JMC {
    function __autoload($className) {
        include_once($className.'.php');
    }
    protected function foo() { }
}

class JMC_files extends JMC (){
}

или это:

function __autoload($className) {
    include_once($className.'.php');
}

class JMC {
    protected function foo() { }
}

class JMC_files extends JMC (){
}

1 Ответ

5 голосов
/ 26 января 2011

__autoload() - это имя магической функции, которая автоматически вызывается по умолчанию при попытке ссылки на класс, который еще не существует в пользовательской области. Это функция, а не метод класса, поэтому вы определяете это так:

function __autoload($className) {
    include_once($className.'.php');
}

Если хотите, вы можете вместо этого установить собственный обработчик автозагрузки (может быть функцией или методом класса), используя spl_autoload_register(). Например, если вы хотите дать вашему основному JMC классу статический метод autoload(), который обрабатывает автозагрузку файлов классов, вы должны сделать что-то вроде этого:

class JMC {
    public static function autoload($className) {
        include_once($className.'.php');
    }

    protected function foo() {}
}

spl_autoload_register('JMC::autoload');

// By referencing this class, if it doesn't yet exist then JMC's autoload()
// gets called and PHP will attempt to load JMC_files.php to look for this class
$files = new JMC_files();
$files->foo();

Где вы хотите разместить свою функцию автозагрузки, зависит от вас. Ваш основной JMC класс звучит как разумное место для него; метод автозагрузки моего фреймворка тоже живет в основном классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...