Способность вызывать сценарий из отдельного файла по его имени называется в PHP подключением файлов. Подключают PHP-сценарии, любые текстовые файлы или HTML-страницы.

Зачем разделять и подключать PHP-сценарии

PHP-разработчики дробят исходный код проекта на отдельные сценарии, чтобы было проще работать. Если написать код в одном файле, сценарий станет необъятным, и ориентироваться будет невозможно.

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

Например, пользовательские функции удобно объявлять в отдельном сценарии, а затем подключать там, где эти функции понадобились.

Способы подключения файлов — require и require_once

Для подключения файлов в PHP есть две языковые конструкции: require и require_once. Отличия между ними минимальны. Оба этих ключевых слова подключают файл с указанным именем и вызывают ошибку, если данный файл не существует.

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

Примеры подключения файлов

Рассмотрим, как подключить один сценарий внутри другого. Для этого воспользуемся инструкцией require. Предположим, у нас есть два сценария: index.php и sub.php.

Содержимое файла sub.php:

<?php
  print("Привет, я содержимое из sub.php!" . PHP_EOL);
?>

В файле index.php находится код, который подключит сценарий sub.php:

<?php
  require 'sub.php';
  print("А я - index.php!" . PHP_EOL);
?>

Интересный факт: require можно использовать как ключевое слово, либо как функцию.

Результат будет одним и тем же:

<?php
  require('sub.php'); // использование как функции
  print("А я - index.php!" . PHP_EOL);
?>

Результат работы:

Привет, я содержимое из sub.php!
А я - index.php!

Что произошло? Два сценария как бы склеились в один: выполнилось все содержимое sub.php и добавилось в начало сценария index.php.

О работе с функцией require подробно рассказано в этом задании.

Абсолютные и относительные пути

При подключении файла в качестве его адреса указывают абсолютный или относительный путь.

Абсолютный путь — это полный адрес файла от корня диска. Например, /var/www/web/site/inc/sub.php.

Относительный путь содержит адрес относительно текущей рабочей директории. Если сценарий лежит в папке /var/www/web/site, то для подключения файла используется такой путь: inc/sub.php.

Рекомендуется всегда указывать относительные пути, чтобы сайт продолжал работать, если его переместят в другую папку.

Абсолютные и относительные ссылки

👉 В PHP есть полезные встроенные константы, их используют в пути к подключаемым файлам.

__DIR__ — полный путь к директории с текущим сценарием.

__FILE__ — полный путь к текущему сценарию.

Видимость переменных в подключаемых сценариях

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

В PHP нет системы модулей, как в других языках программирования (Python, Java, ECMAScript 12). Невозможно «импортировать» отдельные переменные или функции из подключаемого сценария.

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