Полный цикл в digital

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

Готовый код можно скачать в моем репозитории на GitFlic.

Composer предоставляет четыре различных метода автозагрузки файлов, согласно официальной документации Composer, PSR-4 является рекомендуемым способом автозагрузки:

  1. Автозагрузка файлов
  2. Автозагрузка карты классов
  3. PSR-0 автозагрузка
  4. PSR-4 автозагрузка

Давайте опишем шаги, которые необходимо выполнить, если нужно использовать автозагрузку Composer:

  • Создаем файл composer.json в корне проекта, он должен содержать директивы, основанные на типе автозагрузки
  • После каждого изменения в файлах, нужно сгенерировать автозагрузку, в зависимости от того, глобально или локально у установлен composer:
    • php composer.phar dump-autoload для локальной установки
    • composer dump-autoload для глобальной установки
  • Включите инструкцию require __DIR__ . '/vendor/autoload.php'; в верхней части файла, в котором внужно использовать автозагрузку

Автозагрузка: Директива files

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

Чтобы использовать автозагрузку файлов, укажите список файлов в директиве files файла composer.json, как показано в следующем фрагменте:

composer.json{
  "autoload": {
    "files": ["files/TestFiles.php"]
  }
}

В директиве files нужно предоставить список файлов, которые хотим автоматически загрузить с помощью Composer. После того, как создадите файл composer.json в корне проекта с указанным выше содержимым, нужно запустить команду composer dump-autoload для создания необходимых файлов автозагрузчика. Они будут созданы в каталоге vendor. Осталось включить инструкцию require require __DIR__ . '/vendor/autoload.php'; в верхней части файла, в который нужно автоматически подгружать файлы с помощью Composer, как показано в следующем фрагменте:

index.html<?
require 'vendor/autoload.php';

Автозагрузка: Директива classmap

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

composer.json{
  "autoload": {
    "classmap": ["classmap"]
  }
}

Автозагрузка: PSR-0

В стандарте PSR-0 должны использовать пространства имен для определения библиотек. Полное имя класса должно отражать структуру Vendor_Name\Namespace\Class_Name. Кроме того, классы должны быть сохранены в файлах, имеющих ту же структуру каталогов, что и у пространств имен.

Давайте рассмотрим следующий файл composer.json:

composer.json{
  "autoload": {
    "psr-0": {
      "Tutsplus\\Library": "psr0"
    }
  }
}

При автозагрузке PSR-0 вам необходимо сопоставить пространства имен с каталогами. В приведенном выше примере мы говорим Composer, все что начинается с пространства имен Tutsplus\Library, должно быть доступно по пути psr0/Tutsplus/Library.

Если хотим определить класс TestPsr0 в каталоге psr0/Tutsplus/Library, необходимо создать файл psr0/Tutsplus/Library/TestPsr0.php, с пространством имен как показано в следующем фрагменте:

psr0/Tutsplus/Library/TestPsr0.php<?
namespace Tutsplus\Library;

class TestPsr0 
{
    //...
}

Для обращения к классу в нужном файле нужно написать следующие строки:

index.php<?
require 'vendor/autoload.php';
  
$objFoo = new Tutsplus\Library\TestPsr0();

Автозагрузка: PSR-4

PSR-4 похож на автозагрузку PSR-0, нужно использовать пространства имен, но не нужно имитировать структуру каталогов с помощью пространства имен.

composer.json{
  "autoload": {
    "psr-4": {
      "Tutsminus\\Library\\": "psr4/Test/"
  }
  }
}

Мы добавили обратную косую черту в конце пространств имен. Приведенное выше отображение сообщает Composer, все что начинается с пространства имен Tutsminus\Library, должно быть доступно в каталоге psr4/Test/.

Для обращения к классу в нужном файле нужно написать следующие строки:

index.php<?
require 'vendor/autoload.php';
  
$objFoo = new Tutsminus\Library\TestPsr4();

PSR-4 дает гораздо более простую структуру каталогов, поскольку вы можете не создавать вложенные каталоги, но при этом использовать полные пространства имен.


Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг