Ответ
Основное отличие — в поведении при невозможности загрузить указанный файл.
| Конструкция | Поведение при ошибке | Тип ошибки |
|---|---|---|
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 в критичное место, и потом будешь охуевать, почему всё падает в самом неожиданном месте.