Мульти тематический

Примеры кода на PHP, Kotlin. Настройка хостинга. И другое, связанное с веб разработкой.

Автозагрузка классов на php

5
(1)

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

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

Всё это упрощается с применением автозагрузчика. Рассмотрим, как это работает. Допустим, у нас есть файл с классом Products по такому пути:

Classes\Shop\Products.php


Содержимое файла такое:

namespace Classes\Shop;

class Products {
     public function getAll() {
     }
}

И в корне есть файл автозагрузчика — Autoload.php. В котором следующий код:

class Autoload
{
    public static function initial()
    {
        spl_autoload_register(function ($class_name) {
            // Получим путь к файлу
            $path = __DIR__ . '/' . $class_name . '.php';

            // Заменим "\" на "/", т.к. в путях другой слэш
            $path = str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $path);

            // Если файл с классом не нашёлся
            if (!is_file($path)) {
                echo 'Файл не найден: ' . $path;
                exit();
            }

            require_once $path;
        });
    }
}

Потребовалось использовать класс Products. Создаём объект класса Products:

$products_object = new Products();

Если до этого не был подключен файл с классом Products, то будет ошибка. А теперь подключим автозагрузчик до создания объекта. То есть вот так:

require_once __DIR__ . '/Autoload.php';
Autoload::initial();

$products_object = new Products();

А теперь ошибки не будет. Автозагрузчик при первом использовании несуществующего класса Products подключит файл с этим классом.

Чтобы автозагрузчик смог загрузить нужный файл есть некоторые правила:
1. Каждый класс должен быть в отдельном файле;
2. Namespace должен совпадать с путём к файлу.

Насколько полезным был этот пост?

Нажмите на звезду, чтобы оценить это!

Средний рейтинг 5 / 5. Подсчет голосов: 1

Пока нет голосов! Будьте первым, кто оценит этот пост.

Мы сожалеем, что этот пост не был полезен для вас!

Давайте улучшим этот пост!

Расскажите нам, как мы можем улучшить этот пост?

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x