В чем разница между require и include в PHP?

Ответ

Основное отличие — в поведении при невозможности загрузить указанный файл.

Конструкция Поведение при ошибке Тип ошибки
require Фатальная ошибка. Выполнение скрипта немедленно прекращается. E_COMPILE_ERROR
include Выдается предупреждение. Скрипт продолжает выполнение. E_WARNING

Когда что использовать:

  • require — для критически важных файлов, без которых работа приложения невозможна (конфигурация, загрузка основных классов).
  • include — для опциональных или шаблонных частей (HTML-хедер, футер, виджеты), отсутствие которых не должно ломать всю страницу.

Варианты _once:

  • require_once и include_once гарантируют, что файл будет подключен только один раз, даже если директива встретится несколько раз. Это предотвращает ошибки переопределения функций/классов.

Пример:

// 1. Критичный файл с объявлением класса - используем require
require 'app/core/Database.php'; // Если файла нет, скрипт умрет здесь.

// 2. Опциональный шаблон - используем include
include 'templates/sidebar.php'; // Если sidebar отсутствует, страница все равно отобразится.

// 3. Подключение файла с функциями - используем require_once для безопасности
require_once 'utils/helpers.php'; // Не будет ошибки, если helpers.php подключен где-то еще.

На практике в современных PHP-фреймворках и при использовании автозагрузчика классов (Composer PSR-4) прямое использование этих директив стало редким.

Ответ 18+ 🔞

Давай разберём эту тему, чтобы не было потом "ой, а чё у меня всё накрылось медным тазом".

Представь, что require — это как твой батя, который говорит: "Сынок, принеси мне пива". Если пива в холодильнике нет — ты в пизде, отец тебя взъебёт, и вечер испорчен. Скрипт просто нахуй завершается с фатальной ошибкой, и всё, приехали.

А include — это как твоя мамка: "Сынок, купи хлеба". Если в магазине хлеба нет — ну, бля, ладно, суп поедим без хлеба, не смертельно. Скрипт выдаст предупреждение, но продолжит работать, как ни в чём не бывало.

Короче, когда что юзать:

  • require — для файлов, без которых твоему приложению вообще пиздец. Типа конфига с паролями от базы данных или главного класса, на котором всё держится. Нет файла — всё, ядрёна вошь, пока-пока.
  • include — для всякой опциональной хуйни вроде шапки сайта, футера или виджета погоды. Нет шапки — ну и хуй с ней, страница-то откроется.

А ещё есть эти _once приблуды: require_once и include_once — это как умные ребята, которые запоминают, что уже подключали файл. Если ты по пьяни пять раз написал require 'config.php', они не будут орать "ой, функции уже объявлены!", а спокойно пропустят повторные вызовы. Удобно, ебать мои старые костыли, чтобы не было конфликтов.

Вот тебе наглядный пример:

// 1. Без этого файла — всё, пизда рулю. Используем require.
require 'app/core/Database.php'; // Если файла нет — скрипт сдохнет тут же, даже не вздохнёт.

// 2. Шапка сайта — есть хорошо, нет — не страшно. include.
include 'templates/header.php'; // Нет шапки? Ну и хуй с ней, контент-то выведется.

// 3. Файл с функциями — require_once, чтобы не подключать сто раз.
require_once 'utils/helpers.php'; // Даже если ты его уже подключил где-то — ошибки не будет.

Честно говоря, в современных проектах с Composer и автозагрузкой классов эту всю хуйню почти не используют напрямую. Но понимать разницу надо — а то как-нибудь впендюришь include вместо require в критичное место, и потом будешь охуевать, почему всё падает в самом неожиданном месте.