Усі чотири конструкції підключають і виконують інший PHP-файл. Різниця - у реакції на відсутній файл і в повторному підключенні:
require- файлу немає: фатальна помилка, виконання зупиняється.include- файлу немає: попередження, виконання продовжується.require_once/include_once- якщо файл уже підключали, повторно не підключають.
require __DIR__ . '/vendor/autoload.php'; // без нього застосунок не має сенсу
include __DIR__ . '/partials/banner.php'; // банер необов'язковий
Коли що:
require- для того, без чого код не може працювати: автозавантажувач, конфігурація.*_once- для файлів з оголошеннями функцій і класів: повторне оголошення - фатальна помилка.include- для справді необов'язкових фрагментів. На практиці рідко: краще явно перевіритиfile_exists.
Що варто знати:
- Підключений файл бачить змінні з області видимості, де стоїть
include, і може повернути значення:$config = require 'config.php';- так влаштовані конфіг-файли Laravel. - Відносні шляхи розв'язуються відносно
include_pathі поточного робочого каталогу, а не файлу, що підключає. Тому завжди__DIR__ . '/...'. - Шлях від користувача в
include- вразливість (Local/Remote File Inclusion):include $_GET['page'] . '.php'.
У сучасному коді ручні require майже зникли: класи завантажує автозавантажувач Composer (PSR-4), а require лишається в точці входу (public/index.php) і для файлів, що повертають масиви.