Попытка включить файл, file_exists имеет важное значение?

Извините за возможное повторение вопроса. Но трудно использовать это запутанное ключевое слово для поиска ответа.

Итак, вот сценарий:

Я пытаюсь получить совет, чтобы сделать мой простой автозагрузчик. Вот что я сделал до сих пор:

private function getAutoInclude($classfile) {
    $classfileLower = strtolower($classfile);

    if (isset($this->configs['Paths']['base.'.$classfileLower])) { // Use path scope to locate file first
        return require_once($this->configs['Paths']['base.'.$classfileLower]['Path']);
    } elseif ($this->configs['LibRoot'] && strpos($classfile, '\\') !== false) { // If above not work, use namespace to locate file
        return require_once($this->configs['LibRoot'] . DIRECTORY_SEPARATOR . str_replace(array('\\', '/', '_'), DIRECTORY_SEPARATOR, ltrim($classfile, '\\')) . '.php');
    }

    return false;
}

Пока это работает хорошо, но единственное, что меня смущает, это то, что некоторые люди говорят мне, что я должен выполнить проверку file_exists для файла, который я включаю, чтобы я мог включать его безопаснее И быстрее.

Итак, учтите, что файл, который я хочу включить, должен быть там каждый раз, когда я его включаю, действительно ли мне придется использовать file_exists в этом сценарии или нет?

(Я знаю этот вопрос так же, как его задавал новичок. Но когда я услышал, как люди говорят, что если file_exists может ускорить включение файлов, это сломало некоторые мои знания о PHP.)


person Community    schedule 12.05.2013    source источник
comment
Отвечает ли это на ваш вопрос? :) stackoverflow.com/questions/13705179/   -  person Ben    schedule 12.05.2013
comment
@Ben, вопрос на самом деле имеет две ситуации: файл существует или нет. Мины есть только один. И я не подавляю ошибки.   -  person    schedule 12.05.2013
comment
@Ben, я провел еще один тест по этому сценарию, и в результате без file_exists .... быстрее немного быстрее в среднем времени. Учтите, что я ничего не подавляю (он просто умирает), я думаю, что без file_exists это будет намного быстрее. Спасибо, что указали ссылку на этот вопрос.   -  person    schedule 12.05.2013


Ответы (2)


Файл, который вы включаете, является обязательным. (В любом случае, предположительно... вы используете require_once().) Если файла нет, ваш сценарий не будет работать. Нет необходимости во всех этих проверках и чепухе, просто выполните вызов require_once().

Кроме того, добавьте свои пути к пути включения. Пусть PHP разбирается. Не нужно писать код для поиска файла.

person Brad    schedule 12.05.2013
comment
Область пути, которую я сделал, предназначена для поддержки загрузки этих модулей не в ядро ​​​​фреймворка или каталог проекта, например в общую библиотеку. - person ; 12.05.2013
comment
@RainLee, правильно. Добавьте его в путь включения. - person Brad; 12.05.2013
comment
Порядок, в котором вы перечисляете свои пути в include_path, важен, сначала перечислите те, которые получат наибольшее количество вызовов включения, потому что есть небольшие накладные расходы, связанные с каждым путем, который сервер должен проверить, прежде чем найти правильный. Так что в вашем случае вы, вероятно, хотите, чтобы ваш каталог фреймворка был указан первым, а затем позволил ему вернуться к другим. - person Orangepill; 12.05.2013

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

person Seraphin Ahmed    schedule 12.05.2013