Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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

Сайты (да и любые программы) на PHP содержат тысячи, десятки тысяч и сотни тысяч строк кода (есть проекты с миллионами). В таких условиях одним файлом с кодом не обойдешься - его нужно разбивать на части. Для получения доступа к коду, который находится в других файлах, в PHP реализован механизм включения, состоящий из 4 специальных конструкций: include, include_once, require и require_once.

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

<?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 не приводят к ошибке в ситуации, когда файла не существует.


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

  1. Composer

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы PHP-разработчик
Профессия
с нуля
Разработка веб-приложений на Laravel
8 декабря 10 месяцев

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

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

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

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