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