Подтвердить что ты не робот

PHP-поведение include/require внутри условного

Если я помещаю оператор include или require внутри условного выражения, который оценивается как false, интерпретатор PHP вообще пропустит включенный файл или загрузит его на всякий случай?

Пример:

if ($some_user_var) {
    require 'this.php';
} else {
    //do stuff
}

Я где-то читал, что require всегда будет включен интерпретатором независимо от условного, но include не будет. Если это произойдет, просто переход с require в include может означать бесплатное ускорение из-за уменьшенных затрат ввода-вывода и служебной информации синтаксического анализа.

Вероятно, имеет значение, если я запускаю препроцессор, например eAccelerator, но позвольте предположить, что я этого не делаю.

4b9b3361

Ответ 1

Он будет включен, только если условие истинно. Я не знаю, где вы читаете иначе, но они ошибаются.

Единственное различие между include и require заключается в том, что include будет вызывать предупреждение, если оно терпит неудачу, тогда как require вызовет фатальную ошибку.

Чтобы подтвердить это, см. справочную страницу PHP для require.

(ps - если вы выполняете условное включение, в зависимости от того, что такое reaon, вы можете вместо этого использовать include_once() или require_once())

Ответ 2

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

Ответ 3

Я тоже что-то читал. Аргумент выглядит примерно так:

Если вы помещаете условие вокруг include, PHP не имеет способа узнать, требуется ли это или нет, пока он не начнет интерпретировать код, и он не может интерпретировать код, пока он не овладеет всеми переменными и функциями и поэтому - файлы. Поэтому он ЗАГРУЖАЕТ все файлы независимо от состояния, а затем отбрасывает их из окончательной "компиляции".

Хотя, опять же, если вы обертываете условие вокруг файла PHP с ошибкой в ​​нем, оно не прерывает его. И если вы объявляете переменную во включенном файле, а затем используете значение переменной, чтобы определить, включать ее или нет, она не получает ее значения:)

Может быть, это было проблемой в старых версиях PHP?

Я не тестировал его в отношении скорости загрузки и использования ОЗУ, но я хотел бы получить окончательный ответ на этот вопрос. Есть ли накладные расходы, связанные с условными включениями?