Підключення файлів в php include і require

У PHP є можливість підключати файли з кодом всередині інших файлів. Це робиться для того, щоб вибудувати архітектуру програми.
Архітектура програмного забезпечення (англ. Software architecture) - сукупність найважливіших рішень про організацію програмної системи. Архітектура включає:
- вибір структурних елементів і їх інтерфейсів, за допомогою яких складена система, а також їх поведінки в рамках співпраці структурних елементів;
- з'єднання обраних елементів структури і поведінки у все більш крупні системи;
- архітектурний стиль, який направляє всю організацію - все елементи, їх інтерфейси, їх співпраця і їх з'єднання.
Тобто нам потрібно розбивати наш код на окремі частини, кожна з яких буде виконувати свою роль. Наприклад, можна винести якісь функції в окремий файл, підключити цей файл всередині іншого, і користуватися ними вже в цьому файлі.
Сенс архітектури в тому, щоб компоненти програми, що відповідають за якийсь схожу поведінку, лежали в одному місці, і їх можна було легко знайти і змінити.
Ну а взагалі, давайте на прикладі. Але спочатку давайте вивчимо одну «магічну» константу. Мова йде про константі __DIR__. У ній міститься шлях до директорії, в якій знаходиться поточний скрипт (скрипт, в якому ця константа була використана).
Давайте запишемо в наш index.php наступний код:
Результат цього коду:
Ну а тепер повернемося до основної теми уроку. Створимо в директорії з index.php ще один файл з ім'ям functions.php і заповнимо його наступного змісту:
Тепер повернемося в index.php і запишемо в нього наступний код:
Сподіваюся, ніхто не забув, що можна вставляти PHP-код прямо всередині HTML? Про це ми говорили в цьому уроці. Тільки там ми використовували для виведення конструкцію виду:
Якщо у вставці нам потрібно тільки вивести результат певного виразу, то її можна спростити до:
І якщо зараз ми зайдемо в браузері на URL нашого застосування, то побачимо наступне:

Наше додаток успішно відпрацювало, і основний код сторінки у нас не містить допоміжних функцій - вони за допомогою директиви include підключилися в наш файл. Якщо говорити більш детально - PHP-код з файлу functions.php був вставлений в те місце, де він був підключений за допомогою директиви include.
Різниця між require і include
Є ще одна директива для підключення файлів - require. Якщо ви зараз замініть include на require. ось так:
то нічого по суті не зміниться - код відпрацює точно так же.
Однак між ними все ж є різниця. Вона полягає в тому, що якщо підключається файл не знайдений, то при include виникне warning. але програма продовжить своє виконання. А якщо підключається не опиниться при спробі виконати require. то станеться фатальна помилка і скрипт завершить свою роботу.
Давайте знову повернемо директиву include. перейменуємо functions.php в abc.php і спробуємо оновити сторінку.

Отримали помилки різних типів. Перша з них - warning. який повідомляє про те, що файл functions.php не найден. Але скрипт продовжив своє виконання, а потім впав на рядку 10 через те, що не було знайдено функція isEven (). а це вже fatal error.
Давайте тепер замінимо include на require і знову відновимо сторінку.

Тепер ми отримали fatal error відразу на другому рядку, додаток завершило свою роботу на цьому місці.
Тобто require потрібно використовувати там, де підключення файлу обов'язково. Наприклад, файл з конфігурацією, або необхідними функціями.
Як ще можна використовувати require і include
Крім того, що можна підключати файли з PHP-кодом, можна також підключати файли, що містять якийсь текст, або зокрема HTML-код.
Пропоную розглянути наступну ситуацію: у нас на сайті завжди однакова шапка, бічна панель, і футер, але при цьому змінюються заголовок і вміст сторінки. Припустимо, наш сайт виглядає так:

Зеленим кольором я виділив ту частину сторінки, яка буде змінюватися.
Давайте для початку зверстаємо наш шаблон. Сподіваюся, все пройшли курс по HTML. У мене вийшов ось такий код:
Ось така вийшла у мене веб-сторінка:
Давайте тепер розіб'ємо цей код на компоненти. Створимо 4 файлу: header.php з шапкою файлу, sidebar.php з бічної колонкою, content.php з основним вмістом сторінки і footer.php для підвалу сайту.
А тепер повернемося в index.php і запишемо в нього наступний код:
Оновимо сторінку і побачимо, що вона як і раніше працює. Тільки тепер вона зібралася з маленьких шматочків, кожен з яких відповідає за свою частину.
У підключаються файлах ми можемо використовувати змінні, які були визначені до їх підключення. Наприклад, давайте в index.php додамо змінну $ content:
А в файлі content.php виведемо цю змінну:
Давайте тепер знову відновимо сторінку:

Та да! Наша сторінка сформувалася динамічно! Мало того, що вона була зібрана з різних компонентів, так вона ще й виводить значення з змінних.
Директиви require_once і include_once
Іноді потрібно, щоб файл підключився тільки один раз. Наприклад, щоб тільки один раз підключити файл з функціями. Для цього використовуються директиви require_once і include_once.
Давайте створимо файл config.php і запишемо в нього наступне вміст:
І тепер створимо файл test.php і напишемо наступний код:
І побачимо, що текст вивівся тільки один раз.

Тепер давайте замінимо include_once на include:
А ось тепер код підключився кілька разів:
Ось такі пиріжки. Трохи пізніше ми ще повернемося до цієї теми цих відмінностей, і коли саме варто використовувати include_once і require_once.
А поки що на цьому все. Робіть домашнє завдання і до зустрічі на наступних уроках!