Способность вызывать сценарий из отдельного файла по его имени называется в 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
.