Зарегистрируйтесь, чтобы продолжить обучение

Включение файлов Основы PHP

Сайты и программы на PHP содержат тысячи, десятки тысяч и сотни тысяч строк кода. В таких условиях одним файлом с кодом не обойдешься — его нужно разбивать на части.

Чтобы мы могли получить доступ к коду, который находится в других файлах, в PHP реализован механизм включения. Он состоит из четырех специальных конструкций:

  • include
  • include_once
  • require
  • require_once

В этом уроке мы познакомимся с этими конструкциями. Начнем с конструкции require:

<?php

// file: print.php

function sayHi()
{
    print_r('Hi!');
}

// file: index.php

require_once 'print.php';

sayHi(); // => Hi!

Включение файла с кодом делает доступным его содержимое в том месте, куда он включается. В примере выше функция sayHi определяется в файле print.php и становится видна из файла index.php.

То же самое относится не только к определению функций, но даже к переменным:

<?php

// file: print.php

$x = 'Hi!';


// file: index.php

require_once 'print.php';

print_r($x); // => Hi!

Последний пример наталкивает на интересную мысль. Раз переменная появилась внутри файла index.php, то это значит, что конструкция require_once исполняет весь код, который находится во включаемом файле. В этом легко убедиться, поставив эксперимент:

<?php

// file: print.php

print_r("Hi from print.php!\n");

// file: index.php

require_once 'print.php';

print_r("Hi from index.php!\n");

Попробуем запустить:

php index.php

Hi from print.php!
Hi from index.php!

Видно, что сначала выполнился код во включаемом файле, а только потом — код в файле index.php. Можно считать, что require_once берет содержимое включаемого файла и вставляет его вместо себя. То есть код выше работает так, как будто он написан следующим образом:

<?php

// index.php

print_r("Hi from print.php!\n");
print_r("Hi from index.php!\n");

Этот механизм рекурсивен по своей природе: если во включаемом файле есть другой включаемый файл, то сначала исполнится он. Такое поведение чем-то похоже на матрешку. Можно сказать, что весь код всех файлов проекта находится в одном пространстве и доступен для использования напрямую.

Из всех четырех конструкций для включения файлов пользоваться имеет смысл только одной — require_once. Она обладает двумя важными свойствами:

  1. Если файл отсутствует, то эта конструкция приведет к ошибке, и программа остановит свое выполнение
  2. Если в require_once передается файл, который уже был где-то загружен ранее, то она не будет выполнять этот файл повторно, но код этого файла все равно будет доступным

Эти два условия важны, потому что код, опирающийся на них, получается более качественным и простым. В отличие от require_once, остальные конструкции не отвечают этим требованиям:

  • require исполняет включаемый файл каждый раз
  • include и include_once не приводят к ошибке в ситуации, когда файла не существует

Этот урок нужен лишь для понимания происходящих внутри процессов. В реальном же коде за включение файлов отвечает Composer — менеджер управления зависимостями, который будем проходить в курсе про настройку окружения.

Как вы увидите в следующих курсах, современный стандарт разработки на PHP полагается на механизм автозагрузки и запрещает использование явного включения файлов.


Дополнительные материалы

  1. Composer

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»