PHP-поведение include/require внутри условного
Если я помещаю оператор include
или require
внутри условного выражения, который оценивается как false
, интерпретатор PHP вообще пропустит включенный файл или загрузит его на всякий случай?
Пример:
if ($some_user_var) {
require 'this.php';
} else {
//do stuff
}
Я где-то читал, что require
всегда будет включен интерпретатором независимо от условного, но include
не будет. Если это произойдет, просто переход с require
в include
может означать бесплатное ускорение из-за уменьшенных затрат ввода-вывода и служебной информации синтаксического анализа.
Вероятно, имеет значение, если я запускаю препроцессор, например eAccelerator, но позвольте предположить, что я этого не делаю.
Ответы
Ответ 1
Он будет включен, только если условие истинно. Я не знаю, где вы читаете иначе, но они ошибаются.
Единственное различие между include
и require
заключается в том, что include
будет вызывать предупреждение, если оно терпит неудачу, тогда как require
вызовет фатальную ошибку.
Чтобы подтвердить это, см. справочную страницу PHP для require
.
(ps - если вы выполняете условное включение, в зависимости от того, что такое reaon, вы можете вместо этого использовать include_once()
или require_once()
)
Ответ 2
Это неверно. require
не будет включать файлы, которые обернуты в блоки, где они никогда не вызываются, интерпретатор php не игнорирует их. include
и require
имеют незначительную разницу по производительности (в этом отношении они не имеют большой отличий от _once, хотя это более важно).
Ответ 3
Я тоже что-то читал. Аргумент выглядит примерно так:
Если вы помещаете условие вокруг include, PHP не имеет способа узнать, требуется ли это или нет, пока он не начнет интерпретировать код, и он не может интерпретировать код, пока он не овладеет всеми переменными и функциями и поэтому - файлы. Поэтому он ЗАГРУЖАЕТ все файлы независимо от состояния, а затем отбрасывает их из окончательной "компиляции".
Хотя, опять же, если вы обертываете условие вокруг файла PHP с ошибкой в нем, оно не прерывает его. И если вы объявляете переменную во включенном файле, а затем используете значение переменной, чтобы определить, включать ее или нет, она не получает ее значения:)
Может быть, это было проблемой в старых версиях PHP?
Я не тестировал его в отношении скорости загрузки и использования ОЗУ, но я хотел бы получить окончательный ответ на этот вопрос. Есть ли накладные расходы, связанные с условными включениями?