Подключение внешних файлов

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

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

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

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

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

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

Инструкция include

Инструкция include подключает в программу внешний файл с кодом php. Так, для примера определим файл welcome.php:

<?php
function welcome($name)
{
    echo "Hello, $name";
}
?>

Здесь определена функция welcome, которая в качестве параметра принимает условное имя и использут его для вывода приветствия.

Теперь подключим данный файл в нашу программу, которая определена в другом файле в той же папке:

<?php
include "welcome.php";
 
$name = "Tom";
welcome($name);
?>

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

Конструкция include может использовать как относительные, так и абсолютные пути. Например, выше использовался относительный путь. Или, к примеру, если мы имеем следующую структуру

  • Файл index.php
  • Папка scripts
    • Файл welcome.php

То чтобы подключить файл welcome.php из папки scripts, в файле index.php необходимо использовать следующий относительный путь:

include "scripts/welcome.php";

Инструкция include_once

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

Чтобы исключить повторное подключение файла, вместо инструкции include следует применять инструкцию include_once

<?php
include_once "welcome.php";
 
$name = "Sam";
welcome($name);
?>

И теперь, если мы подключим этот же файл с помощью include_once еще где-нибудь ниже, то это подключение будет проигнорировано, так как файл уже подключен в программу.

Инструкции require и require_once

Действие инструкции require подобно инструкции include: она также подключает внешний файл, вставляя в программу его содержимое. Только теперь, если данный файл не будет найден, действие программы прекратится (инструкция include в этом случае выбрасывает предупреждение):

<?php
require_once "welcome.php";
?>

Константы для построения путей к файлам

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

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

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

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

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

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

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

Функция spl_autoload_register

В больших приложениях количество подключаемых файлов может быть довольно большим. Однако встроенная функция spl_autoload_register() в определенных ситуациях позволяет избежать большого количества инклудов. В качестве параметра она принимает функцию автозагрузки. Эта функция автоматически вызывается, когда в программе начинает использоваться неизвестный класс или интерфейс. И функция автозагруки пытается загрузить этот класс или интерфейс. В качестве параметра функция автозагрузки принимает название класса или интерфейса, которые надо загрузить.

Например, пусть у нас будет файл Person.php, в котором располагается класс Person:

<?php
class Person
{
    private $name, $age;
    function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    function printInfo()
    {
        echo "Name: $this->name<br>Age: $this->age";
    }
}
?>

Обращаю внимание, что название файла соответствует названию класса.

Используем функцию автозагрузки для подключения подобного класса:

<?php
function my_autoloader($class) {
    echo "Вызов функции автозагрузки<br>";
    include $class . ".php";
}
 
spl_autoload_register("my_autoloader");
 
$tom = new Person("Tom", 25);
$tom->printInfo();
?>

Функция spl_autoload_register() в качестве параметра принимает название функции автозагрузки – в данном случае это функция my_autoloader(). В качестве параметра она принимает название класса. Например, в данном случае используется класс Person, который в этом скрипте не определен. И когда программа встретит использование данного класса, она вызовет функцию my_autoloader(), в качестве параметра $class передаст в нее название класса Person.

Все действия функции автозагрузки мы определяем сами. В данном случае с помощью echo выводится некоторое диагностическое сообщение и подключается файл класса:

include $class . ".php";

При этом в данном случае неважно какой класс, главное, чтобы он хранился в одноименном файле с расширением .php. В этом случае программа выведет следующее:

Вызов функции автозагрузки
Name: Tom
Age: 25

Задание

Создайте папку /template/default. Поместите в неё файлы head.php header.php и footer.php. Вынесите в эти файлы соответствующие части вашей страницы index.php.

Создайте в корне ещё пару файлов: news.php, catalog.php. Подключите на этих страницах те же файлы из папки /template/default. Между шапкой и подвалом разместите на этих страницах уникальный для страниц контент, повторяющиеся элементы выведите циклами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *