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