Зарегистрируйтесь для доступа к 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

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

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

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

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

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

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

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

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

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

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

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

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

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

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

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