Понимание требуемого класса и наличие

Я загружаю фреймворк и код, и у меня есть вопрос относительно require и include vs class_exists .

В коде, который я загружаю, я вижу:

 require_once('class.php'); 

Так же как:

 if(class_exists('class') == false) { require('class.php'); } 

Я получаю require_once означает только 1 раз, и класс существует, проверьте, существует ли класс.

Мой вопрос: второй лучше, чем первый? и почему?

это условие:

 if(class_exists('class') == false) { require('class.php'); } 

запретить вызов require_once .

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

Как обсуждалось в других ответах, существуют семантические различия между этими двумя вариантами. Также в сценарии совместного хостинга, где хостинг-провайдер не предлагает кэширование PHP-кода ( APC или equiv), все файлы кода должны быть прочитаны и скомпилированы один раз за запрос . Здесь главный убийца – это не время компиляции (~ 0.5M PHP-инструкции / сек на современном ядре), но накладные расходы ввода-вывода для сбора файлов PHP, если они не кэшированы в кеш файловой системы (10 с I / Os / sec).

В этом случае, если для приложения требуется ядро ​​из десятка модулей для 90% запросов, тогда имеет смысл кэшировать их в один файл с объемной загрузкой. Если этот тип решения принят, то размещение class_exists('class') вокруг требования файла класса делает его защищенным от бомбы.

Также предостережение: если вы используете функцию __autoload() для загрузки класса JiT, имейте в class_exists('fred') что class_exists('fred') вызовет автозагрузку fred . Если вам нужен слабый зонд, вам нужно использовать предикат !in_array( 'fred', get_declared_classes() ) .

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

  • require_once() include только один файл sa.

  • class_exists() проверяет, существует ли ваш класс .

Вы можете определить класс в нескольких файлах, а require_once() не волнует. Второй кусок будет.