Поведение PHP включения/требования внутри условного


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

Примером может быть:

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

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

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

Author: Jens Roland, 2010-10-11

3 answers

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

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

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

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

 22
Author: Spudley, 2010-10-11 13:35:39

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

 1
Author: Explosion Pills, 2010-10-11 13:35:05

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

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

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

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

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

 1
Author: Enigma Plus, 2012-02-29 14:29:27