Как вы знаете, в PHP имеется 4 функции для подключения других файлов. Это include, include_once, require и require_once. Чем же они различаются и как правильно их использовать?
Для начала разберём разницу между include и require. Эти две функции различаются только реакцией на отсутствие подключаемого файла. Функция include («включить») при отсутствии указанного файла выдаст сообщение об ошибке типа E_WARNING, но выполнение программы продолжится. В отличие от неё, require («требовать») при отсутствии подключаемого файла выдаёт фатальную ошибку (E_ERROR), которая приводит к немедленной остановке выполняемого скрипта.
Таким образом, на основании знаний о том, как выполняется ваш код, вы можете использовать тот или иной оператор. Например, если это просто кусок HTML, который в целом не влияет на ход работы программы, или это какие-то второстепенные подключаемые модули, без которых остальная программа может нормально функционировать, то смело используйте include. В остальных же случаях я рекомендую использовать require. Это предотвратит возможность некорректного выполнения кода и в случае ошибки (например, подключаемый файл удалён вирусом или потерялся в процессе разработки) будет просто завершать скрипт. В одной из будущих статей я покажу вам как отслеживать абсолютно все нестандартные ситуации в коде и быть в курсе происходящего внутри сайта.
Теперь рассмотрим конструкции include_once и require_once. От простых include и require они отличаются окончанием «_once», которое предотвращает повторное подключение тех же самых файлов.
Скажем, если в вашем подключаемом файле есть описания классов или функций, то такой файл подключать повторно нельзя, поскольку он будет исполнен заново и PHP выдаст фатальную ошибку при попытке определить классы или функции с уже существующими именами. Нет сомнений, что можно построить код таким образом, чтобы повторное подключение никогда не происходило, но это лишние ограничения и лишняя работа. Поэтому функции с суффиксом «_once» полезны и нужны.
В своей практике я использую два вида файлов. Первый вид — это файлы, содержащие один или несколько классов и не содержащие кода, исполняемого «напрямую». Такие файлы всегда подключаю с помощью require_once. Второй вид — это шаблоны или куски шаблонов, содержащие HTML и немного PHP-кода. Такие файлы подключаю с помощью require, поскольку иногда один и тот же кусок шаблона может быть использован на странице несколько раз.
Я никогда не использую include и include_once, поскольку считаю отсутствие файла, который должен быть, критической ситуацией, требующей немедленного решения без каких-либо компромиссов. А если мне нужно подключать файл, наличие которого под сомнением, то я просто предварительно проверяю его наличие с помощью is_file().
Существует ещё одна фишка при использовании include. Несмотря на то, что на самом деле это не функция, а языковая конструкция, внутри подключаемого файла работает оператор return. И, стало быть, include возвращает это значение вызываемому коду. Это выглядит вот так
$ret = include ‘file.php’;
На сегодня это всё, программируйте правильно!