Эффективная функция автозагрузки - PullRequest
0 голосов
/ 18 марта 2011

В настоящее время я создаю свой собственный PHP-фреймворк и создаю множество каталогов для хранения своих классов.

Это моя текущая функция автозагрузки:

function __autoload($className)
{
    $locations = array('', 'classes/', 'classes/calendar/', 'classes/exceptions/', 'classes/forms/', 'classes/table/', 'classes/user', 'pages/', 'templates/');
    $fileName = $className . '.php';

    foreach($locations AS $currentLocation)
    {
        if(file_exists($currentLocation . $fileName))
        {
            include_once ($currentLocation . $fileName);
            return;
        }
    }
}

Теперь в моем основномфайл класса У меня уже есть все необходимые классы, чтобы их не нужно было искать.

Вот мои вопросы:

  1. Достаточно ли эффективна эта функция?Будет ли много времени загрузки или есть ли способ для меня минимизировать время загрузки?
  2. Является ли include_once () тем способом, который я должен использовать, включая классы?
  3. Есть лиспособ, которым я мог написать функцию, чтобы угадать на самых популярных папках?Или это заняло бы слишком много времени и / или невозможно?
  4. Помогут ли мне вообще пространства имен?(Я читаю и узнаю о них прямо сейчас.)

1 Ответ

1 голос
/ 18 марта 2011
  1. Здесь очень хорошо ответили: автозагрузка и несколько каталогов
  2. Вероятно, вам следует использовать require по двум причинам: а) вам не нужно иметь PHP-трек, если файл уже включен, потому что если он есть, вам не нужно будет вызывать __autoload в первое место и б) если файл не может быть включен, вы все равно не сможете продолжить выполнение
  3. Ответ по пункту 1 охватывает это
  4. Не обязательно; вам нужен механизм, подобный пространству имен, чтобы реализовать более быструю загрузку (чтобы посмотреть, куда вам нужно), но вы можете подделать его, если необходимо, без использования реальных пространств имен

Для справки, взаимодействие между __autoload и пространствами имен задокументировано здесь .

...