Как добавить файл в автозагрузку через cmd

Обновлено: 05.07.2024

При работе с PHP-проектами разработчикам часто приходится управлять множеством сторонних библиотек. Но установка и обновление этих библиотек довольно сложны. Чтобы решить эту проблему, вы можете использовать Composer и Autoload, чтобы сэкономить время и усилия.

  1. 1. Что такое Композитор?
    1. 1.1. Распространенные проблемы в управлении библиотеками
    2. 1.2. Преимущества Composer
    3. 1.3. Установите и активируйте Composer
      1. 1.3.1. Проверьте, установлен ли PHP
      2. 1.3.2. Установите Composer в Windows
      3. 1.3.3. Установите Composer на CentOS/RHEL/Ubuntu
        1. 1.5.1. Настройка Composer для новых проектов PHP
        2. 1.5.2. Интеграция библиотек в проект PHP с помощью Composer
        3. 1.5.3. Удаление библиотеки из проекта PHP
          1. 1.6.1. Диапазон версий
          2. 1.6.2. Подстановочные версии
          3. 1.6.3. Диапазоны дефисов
          4. 1.6.4. Тиддл Диапазон
          5. 1.6.5. Диапазон каретки
          6. 1.6.6. Мастер разработки
            1. 2.1. Что такое автозагрузка?
            2. 2.2. Как работает автозагрузка?

            Теперь давайте узнаем, что такое Composer и Autoload и как их использовать в PHP!

            используйте Composer и Autoload, чтобы сэкономить время и силы на установку и обновление сторонних библиотек

            Что такое Composer?

            Композитор — это инструмент для управления зависимостями в PHP. Проще говоря, Composer используется для управления библиотеками в вашем проекте PHP.

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

            Распространенные проблемы управления библиотеками

            При работе с PHP-проектами, если вы не используете Composer, вам придется столкнуться со многими проблемами при управлении библиотекой.

            Во-первых, вам нужно скачать и переместить их в папку проекта PHP, чтобы использовать внешние библиотеки. Однако установка довольно сложна и ее трудно запомнить.

            Кроме того, во многих случаях одни библиотеки зависят от других. Поэтому их обновление занимает много времени и сил, потому что нужно найти оригинальную библиотеку. Например, библиотека А зависит от библиотеки Б, и если в библиотеке Б есть новая версия, вам придется сначала найти и обновить ее в библиотеке А.

            Теперь, благодаря Composer, перечисленные выше проблемы можно легко решить!

            Преимущества Composer

            Composer предлагает разработчикам два основных преимущества:

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

            Установить и активировать Composer

            Чтобы установить и активировать Composer, выполните следующие действия:

            Проверить, установлен ли PHP

            Во-первых, вам необходимо установить PHP. Чтобы проверить, установлен ли PHP, введите в терминале следующую команду:

            Установите Composer в Windows

            Установить Composer в Windows очень просто и быстро. Вам просто нужно скачать файл Composer-Setup.exe, а затем запустить его.

            По умолчанию Composer добавляет свой путь к системной переменной среды PATH, чтобы вы могли вызывать команду composer из любого места. Однако, если вы не можете запустить команду composer, добавьте значение C:\ProgramData\ComposerSetup\bin в системную переменную среды PATH.

            Установите Composer на CentOS/RHEL/Ubuntu

            Перейдите в терминал и введите следующую команду для установки Composer:

            Некоторые общие команды

            При работе с Composer вам понадобятся следующие общие команды:

            • Проверьте текущую версию Composer:
            • Обновите последнюю версию Composer:
            • Очистите кэш-память Composer (чтобы Composer перезагрузил библиотеки в кэш-память):
            • Поиск пакетов библиотек:

            Как использовать Composer в PHP-проектах

            Настройка Composer для новых проектов PHP

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

            После этого вам нужно объявить файл composer.json следующим образом:

            Готово! Я закончил создание файла composer.json со следующим содержимым:

            С этого момента настройки Composer (включая настройки для библиотек) будут сохраняться в этом файле composer.json.

            Интеграция библиотек в проект PHP с помощью Composer

            Во-первых, вам нужно определить, какие библиотеки нужны вашему проекту PHP, выполнив поиск здесь.После того, как вы определили библиотеки, которые необходимо использовать в вашем проекте PHP, интегрируйте их в свой проект PHP с помощью Composer двумя способами, указанными ниже:

            Способ 1. Введите команду на терминале

            Например, я хочу использовать последнюю версию библиотеки phpro/grumphp (она используется для проверки качества кода). Поэтому я ввожу в терминал следующую команду:

            Эта команда потребует от Composer загрузки библиотеки phpro/grumphp. Эта библиотека будет сохранена в файле поставщика в вашем проекте PHP.

            Кроме того, автоматически создается файл vendor/autoload.php. Этот файл используется для автоматической загрузки библиотек для проекта PHP.

            Вернитесь к файлу composer.json, в файле появится следующий код:

            • phpro/grumphp — это библиотека, используемая для проекта PHP.
            • 0.19.1 — текущая версия библиотеки.

            С этого момента, когда вы хотите поделиться своим проектом PHP, просто скопируйте только файл composer.json, а не всю папку поставщика. Когда вы вставляете файл composer.json на другой компьютер, Composer автоматически обновляет папку поставщика.

            Способ 2. Введите команду в файл composer.json

            Вместо того, чтобы вводить команду непосредственно из терминала в качестве метода 1, вы можете отредактировать описание библиотеки whoops в файле composer.json, добавив в раздел require код следующего содержания:

            Например, я хочу интегрировать библиотеку phpro/grumphp версии 0.19.1 в Composer, поэтому я заполняю раздел require следующим содержанием:

            После этого введите обновление композитора, чтобы установить библиотеку. Эта команда автоматически обновит последнюю версию некоторых библиотек, необходимых для проекта PHP.

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

            Чтобы использовать указанные выше библиотеки для проекта, вам просто нужно ввести команду include vendor/autoload.php в файл index.php в проекте PHP.

            Удалить библиотеку из проекта PHP

            Чтобы удалить библиотеку, которая уже была интегрирована в проект PHP (сохранена в файле поставщика), вы можете воспользоваться одним из двух способов:

            Способ 1. Использование команды composer

            В терминале введите следующую команду:

            В этой команде поставщик/пакет — это имя библиотеки, которую вы хотите удалить. Например, я хочу удалить библиотеку phpro/grumphp, поэтому команда будет такой:

            Способ 2. Обновите файл composer.json

            Просто перейдите к файлу composer.json, перейдите к разделу require, удалите нужную папку (например, phpro/grumphp ) и введите команду composer update.

            Указать версии для библиотек в Composer

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

            Диапазон версий

            Например, чтобы указать, что Composer разрешено использовать только версии до версии 0.19 и не разрешено использовать версию 0.17 библиотеки phpro/grumphp, я ввожу в терминал следующую команду:

            Подстановочные версии

            Этот метод используется для того, чтобы Composer использовал только версии библиотеки в диапазоне x.x.* .

            Например, если я использую команду composer require phpro/grumphp "0.18.*", Composer может использовать только версии после версии 0.18 и до версии 0.19 (например, 0.18.1, 0.18.2, . ) библиотеки phpro/grumphp.Это похоже на использование «>=0.18

            Диапазоны дефисов

            Этот метод использует оператор - для определения диапазона. Для лучшего понимания посмотрите на приведенный ниже пример.

            Я хочу, чтобы Composer использовал только версии после версии 0.1 и до версии 0.19 библиотеки phpro/grumphp. Поэтому я ввожу в composer require phpro/grumphp команду "0.1 - 0.18". Диапазон включает 0.18.1, 0.18.2,... Это похоже на ">=0.10

            Тиддл-диапазон

            В этом методе используется оператор ~. Например, если вы введете «~0.18», Composer будет использовать только версии после 0.18 (кроме 0.18) и до 1.0. Это похоже на «> 0,18

            Диапазон вставки

            В этом методе используется оператор ^, чтобы указать, что Composer разрешено использовать версии библиотеки только из введенной версии (не включая саму себя).

            Например, если я введу ^0.18.1 , Composer будет использовать только версии библиотеки после 0.18.1 (кроме 0.18.1).

            Мастер разработки

            При использовании метода Dev-Master ваши библиотеки всегда будут иметь самые последние доступные версии. Однако это сопряжено с большим риском, поскольку последние версии могут быть не доработаны и в них могут быть ошибки.

            Например, чтобы Composer всегда использовал последнюю версию библиотеки phpro/grumphp, я ввожу команду composer require phpro/grumphp "dev-master".

            Вы можете использовать Composer для установки расширений Meta Box с wordpress.org

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

            Что такое автозагрузка?

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

            Как я упоминал выше, Composer делает управление библиотекой удобным и быстрым. Кроме того, Autoload — чрезвычайно полезный инструмент, который помогает Composer легко управлять зависимостями между пакетами библиотек.

            Как работает автозагрузка?

            Чтобы понять, как работает автозагрузка, сначала нужно узнать о стандарте PSR-4. Это рекомендуемый стандарт кодирования PHP для библиотек.

            Ниже приведено содержание стандарта PSR-4:

            Когда разработчики создают класс в соответствии с приведенной выше структурой, на класс может ссылаться строка кода с тремя компонентами: NameSpace , SubNameSpaces и ClassName .

            • NameSpace: имя поставщика и требуемый префикс, названный вами. В частности, оно не должно быть похоже на имя других поставщиков.
            • SubNameSpaces : дочерние пространства имен (после первого пространства имен — поставщик). Из SubNameSpaces путь класса будет соответствовать структуре папки, в которой хранится код. Например, вы сохраняете код библиотеки в исходной папке src и вызываете один из ваших классов cls1 с синтаксисом \myvendor\namespace1\namespace2\cls1. Это означает, что в папке src есть папка namespace1, а в папке namespace1 есть папка namespace2.
            • ClassName : это имя созданного класса. Это необходимо. Кроме того, вам нужно назвать файл PHP как ClassName в папке, которая соответствует последнему пространству имен ( ClassName.php ). Этот файл будет определять код класса.

            Все проекты PHP должны использовать библиотеку автозагрузки для загрузки вышеуказанной структуры при необходимости. Платформы с одинаковым механизмом автозагрузки могут повторно использовать библиотеки друг друга. В настоящее время почти все PHP-фреймворки используют один и тот же механизм автозагрузки в соответствии с PSR-4.

            Composer может генерировать код автозагрузки в соответствии с PSR-4. Таким образом, этот инструмент может помочь вам повторно использовать библиотеки других проектов PHP.

            Например, я хочу создать класс Car с пространством имен Vehicle/Listings . Таким образом, код класса будет сохранен в файле src/Listings/Car.php следующего содержания:

            Приведенный выше код совместим с PSR-4, поэтому Composer поможет вам интегрировать его в файл vendor/autoload.php. Чтобы вызвать этот класс при необходимости, сообщите Composer, что у вас есть модуль автозагрузки PSR-4, добавив следующий код в файл composer.json:

            Для этого кода требуется, чтобы пространство имен уровня 1 — Vehicle указывало на папку src/. Пространства имен уровня 2 и выше будут работать одинаково. Например, путь класса Car — src/Listings/Car.php. Чтобы было ясно, src — это файл, на который указывает пространство имен 1, Listings — это файл в src , Car.php — это PHP-файл, содержащий код класса.

            После этого введите в терминал следующую команду:

            Теперь в vendor/autoload.php есть механизм автоматической загрузки вашего кода, когда вам нужно его использовать. Отныне, если вы хотите использовать класс Car, просто вызывайте его одним из двух кодов ниже:

            Второй код:

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

            В автозагрузке есть два разных способа вызова

            Последние слова

            Composer и Autoload — два мощных и незаменимых инструмента в PHP. Поэтому вы должны использовать их, чтобы сэкономить время и усилия на управлении библиотеками в вашем проекте. Надеюсь, эта статья помогла вам лучше понять эти два инструмента и научиться их использовать на базовом уровне. Если у вас есть какие-либо вопросы о Composer и Autoload, поделитесь ими с нами в разделе комментариев!

            Кроме того, вам могут понравиться наши статьи о том, как использовать шаблон пула объектов и методы PHP для написания чистого и читаемого кода в нашей категории "Руководство".

            Существует несколько способов автоматической загрузки модов при запуске ZDoom. Обратите внимание, что при необходимости автозагрузку можно отключить для запуска с помощью параметра командной строки -noautoload.

            Содержание

            Автозагрузка с помощью ini-файла ZDoom

            Отредактируйте zdoom.ini и найдите соответствующий раздел «[*.Autoload]» (где * — название игры). Под ним вы можете добавить WAD с «Path=путь и имя файла».Например, если вы хотите загрузить моды с именами skins.wad и xhairs.wad для Strife, вы должны добавить в ini-файл следующее:

            В настоящее время распознаются следующие разделы автозагрузки:

            • Global.Autoload — все игры
              • Chex.Autoload — все игры Chex
                • Chex1.Autoload — Chex Quest 1
                • Chex3.Autoload — Chex Quest 3
                • Doom1.Автозагрузка — Doom 1 / Ultimate Doom
                • Doom2.Автозагрузка — Doom 2
                • Doom2BFG.Autoload — издание Doom 2 BFG
                • Freedoom.Автозагрузка — Freedoom
                • Freedoom1.Autoload — демо-версия Freedoom
                • FreeDM.Autoload — Freedoom Deathmatch
                • TNT.Autoload – Final Doom: TNT Evilution
                • Plutonia.Autoload — Final Doom: Эксперимент с Plutonia
                • HexenDemo.Autoload — демонстрационная версия Hexen
                • HexenDK.Autoload — дополнение Hexen: Deathkings of the Dark Citadel

                Сначала загружаются более общие разделы, а затем разделы, относящиеся к игре. Таким образом, если какое-либо содержимое загружается из раздела HexenDK.AutoLoad, которое конфликтует с содержимым, загруженным из раздела Hexen.AutoLoad, содержимое HexenDK будет иметь приоритет.

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

                Этот метод предназначен только для файлов .WAD, содержащих скины. Хотя его можно использовать для других типов модов, делать это не рекомендуется. Создайте новый подкаталог с именем «skins» в вашем каталоге ZDoom и поместите туда WAD, которые вы хотите автоматически загружать, и они будут загружены при следующем запуске ZDoom. ZDoom может автоматически загружать другие файлы из каталога скинов, но для этого необходимо, чтобы расширение файла было .wad. Этот метод не рекомендуется разработчиками, поскольку люди забывают, что у них есть WAD в каталоге скинов, и сообщают об ошибках, вызванных ими.

                Автозагрузка мода

                Свойство LOAD массива GAMEINFO позволяет автоматически загружать несколько файлов в точном порядке при загрузке файла, содержащего такой массив. Это может упростить загрузку многофайловых модов и устранить необходимость в пользовательских ярлыках, как описано ниже. Поскольку это специфично для мода, а не обобщено, на него не влияет параметр -noautoload.

                Автозагрузка с помощью ярлыка

                Это хороший метод, если вы хотите воспроизвести много модов для ZDoom, состоящих из нескольких файлов. Технически это не автозагрузка, и ZDoom не обнаружит ее как таковую, поэтому параметр -noautoload не повлияет на нее. Для этого сначала создайте ярлык zdoom.exe на рабочем столе или в любом другом удобном для вас месте. Затем щелкните по нему правой кнопкой мыши и перейдите в «Свойства». В разделе «Ссылка на. ”, по умолчанию вы должны увидеть:

                В этом поле добавьте следующую командную строку:

                И так далее, заменяя пример именами файлов по вашему выбору. Ставьте пробел между именами файлов. Например, если вы хотите поиграть в мод под названием doomhell.wad с дополнительными патчами coolweap.wad и newenemy.wad (да, в примере явно не хватает креатива), ваша командная строка должна выглядеть так:

                Параметр -file предполагает, что если в имени файла отсутствует расширение, этот файл является файлом WAD. Поскольку «Ссылка на. ” может содержать только 255 символов, рекомендуется не указывать расширения .WAD при загрузке очень большого количества файлов. Кроме того, таким образом можно загружать файлы, отличные от файлов WAD. Это полезно при загрузке звука волны или изображений без добавления их в файл WAD. Например, если у вас есть новый звук для пистолета, и вы хотите играть с ним в DOOMHELL.WAD, сначала переименуйте этот звуковой файл в dspistol.wav, чтобы ZDoom мог его распознать, а затем добавьте его в командную строку, которая теперь должна выглядеть так (обратите внимание, что расширения .WAD здесь опущены):

                На данный момент единственный способ взаимодействовать с разделами автозагрузки в файле composer.json — использовать команду dump-autoload. Если реализованы следующие команды, файл composer.json может быть лучше обработан с помощью утилиты командной строки:

                требовать автозагрузки

                Команда require-autoload добавляет новое пространство имен или путь к файлу composer.json из текущего каталога.

                После добавления/изменения автозагрузки следует запустить неявный дамп-автозагрузку

                Параметры

                • --dev: изменения затрагивают раздел autoload-dev

                удалить-автозагрузка

                Команда remove-autoload удаляет пространства имен или путь к файлу composer.json из текущего каталога.

                После добавления/изменения автозагрузки следует запустить неявный дамп-автозагрузку

                Параметры

                • --dev: изменения затрагивают раздел autoload-dev

                Добавление команд в интерактивную процедуру инициализации

                Команду require-autoload следует добавить в интерактивную процедуру инициализации, чтобы упростить создание composer.json.

                Открытые вопросы:

                • Require-autoload можно назвать add-autoload .Для единообразия я назвал его таким образом, чтобы он соответствовал команде require.
                • Порядок аргументов для psr4/psr0 можно изменить в команде require-autoload, чтобы сделать его более совместимым с добавлением classmap/файлов.

                В этом варианте путь всегда указывается после выбранного типа автозагрузки.

                Мысли и комментарии приветствуются

                Текст был успешно обновлен, но возникли следующие ошибки:

                прокомментировал curry684 30 марта 2016 г.

                Разве для таких сложных модификаций гораздо практичнее просто написать сценарий самостоятельно?

                Я не вижу особого смысла добавлять отдельные команды для всех возможных модификаций — это файл JSON, поэтому каждый может (машина) легко изменить его.

                Селдаек прокомментировал 15 апреля 2016 г.

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

                ktomk прокомментировал 10 июля 2016 г. •

                С JSON не так просто работать из командной строки. Может быть, на основе предложения @curry684 возможно иметь какую-то команду "json", поэтому композитор предоставляет ее самостоятельно в командной строке?

                прокомментировал docteurklein 4 января 2018 г. •

                Меня также заинтересовало бы встроенное решение в CLI композитора, но, поскольку мне кажется, что это не нужная функция, я написал для этого однострочный код:

                cat composer.json | jq --indent 4 '.autoload."psr-4" |= . + ' | файл composer.json

                или более общий, многоразовый подход для добавления в ~/.*shrc :

                прокомментировал docteurklein 4 января 2018 г. •

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

                Было бы замечательно, если бы Composer предоставил возможность угадывать автозагрузку?

                где находится src/Test.php

                добавит запись автозагрузки, содержащую:

                PS: редактировать json вручную ужасно.

                hparadiz прокомментировал 19 мая 2018 г.

                В итоге я использовал для этого этот код:

                Файл выходит нормально. Вполне приемлемо даже для совершенно нового проекта. Однако я устал запускать это в существующих крупных проектах, поскольку я не уверен, как это приведет к упорядочению данных json.

                KEINOS прокомментировал 2 марта 2019 г.

                PS: ужасно редактировать json вручную @docteurklein

                Я согласен. Ненавижу думать о косой черте и бегстве от JSON. Это ужас.

                Пока что предложение @curry684 для меня разумно.

                Но я +1 за эту функцию. Так как многие документы говорят нам редактировать и добавлять вручную (через редактор).

                CaliforniaMountainSnake прокомментировал 7 июня 2020 г.

                Однострочник для установки некоторого пути автозагрузки в composer.json:

                devnll прокомментировал 18 января 2021 г.

                +1 для этой функции. Кажется странным, что это существует для репозиториев и дополнительных, но не для автозагрузки :(

                Что-то, с чем я столкнулся, если это может быть полезно:

                В моей системе использование json_decode/encode в соответствии с рекомендациями приводит к созданию composer.json, что приводит к сбою последующего использования composer require, поскольку он ожидает этого (объекта):

                но composer.json содержит это (массив):

                Я заработал, декодируя объект (вместо массива), что также означало добавление раздела автозагрузки через свойства объекта (вместо индексов массива):

                Я уверен, что это нужно не только мне.

                Моя цель состояла в том, чтобы позволить __autoload() легко расширяться в сложных системах/фреймворках, где определенные библиотеки и т. д. могут нуждаться в загрузке по-разному, но вы не хотите жестко программировать небольшие корректировки в вашей рабочей __autoload(), чтобы это позволяло случиться.

                Используя объект ServiceLocator с некоторыми статическими методами и свойствами, позволяющими прикреплять к нему слабосвязанные локаторы, вы можете поменять местами/изменить и добавить функциональность вашего __autoload() во время выполнения.

                /**
                * Определяет методы, которые должны реализовывать любые фактические локаторы
                * @package ServiceLocator
                * @author Chris Corbyn
                */
                локатор интерфейса
                /> /**
                * Сообщить, можно ли найти данный класс
                * @param string class
                * @return bool
                */
                public function может найти ( $ класс );
                /**
                * Получить путь к классу
                * @param string class
                * @return string
                */
                public function getPath ( $ класс );
                >

                /**
                * Основной локатор сервисов.
                * Использует слабосвязанные локаторы для работы
                * @package ServiceLocator
                * @author Chris Corbyn
                */
                class ServiceLocator
                /** < br />* Содержит все подключенные локаторы сервисов
                * @var array Locator
                */
                protected static $locators = array();

                /**
                * Прикрепить локатор нового типа
                * @param object Locator
                * @param string key
                */
                public static function attachLocator ( Локатор $locator, $key)
                self :: $locators [$key] = $locator;
                >
                /**
                * Удалить добавленный локатор
                * @param string key
                * @return bool
                */
                общедоступная статическая функция dropLocator ( $key )
                if ( self :: isActiveLocator ( $ key ))
                unset ( self :: $ locators [ $ key ]);
                вернуть истину;
                >
                иначе вернуть false ;
                >
                /**
                * Проверить, загружен ли в данный момент локатор
                * @param string key
                * @return bool
                */
                общедоступная статическая функция isActiveLocator ($key)
                return array_key_exists ($key, self :: $locators);
                >
                /**
                * Загрузить требуемый сервис, запросив все локаторы сервисов
                * @param string class
                */
                public function load ( $class )
                foreach ( self :: $locators as $key => $obj )
                if ( $obj -> canLocate ( $class ))
                require_once $obj -> getPath ( $ сорт );
                если ( class_exists ( $class )) return;
                >
                >
                >
                >

                /**
                * PHP по умолчанию __autload
                * Захватывает экземпляр ServiceLocator и затем запускает его
                * @package ServiceLocator
                * @author Chris Corbyn
                * @ param string class
                */
                функция __autoload ( $class )
                $locator = new ServiceLocator ();
                $locator -> загрузить ( $class );
                >

                //Определяем какой-либо локатор сервисов для присоединения.
                класс PearLocator реализует локатор
                protected $base = '.' ;

                публичная функция __construct ( $directory = '.' )
                $this -> base = (string) $directory ;
                >

                публичная функция canLocate ( $class )
                $path = $this -> getPath ( $class );
                if (file_exists ($path)) return true;
                иначе вернуть ложь;
                >

                публичная функция getPath ( $class )
                возвращает $this -> base . '/' . str_replace('_', '/', $класс). '.php';
                >
                >

                // . прикрепите его.
                ServiceLocator :: attachLocator (новый PearLocator(), 'PEAR' );

                В предыдущем уроке мы продемонстрировали использование Composer для интеграции библиотек кода Packagist в наши веб-сайты PHP. Мы также продемонстрировали использование встроенного автозагрузчика Composer для установленных нами пакетов. В этом руководстве мы покажем, как автоматически загружать наши собственные классы, а также другие классы, не являющиеся компоновщиками, с помощью того же встроенного автозагрузчика Composer.

                Автозагрузка позволяет нам использовать классы PHP без необходимости вызывать их require() или include() и считается отличительной чертой современного программирования.


                Composer автоматически загружает классы, не относящиеся к пакетам.

                Короткое напоминание об автоматической загрузке библиотек кода Packagist

                В предыдущем уроке мы видели, что для автоматической загрузки библиотек Packagist достаточно добавить в начало наших скриптов следующую строку, для которой требуется встроенный автозагрузчик Composer:

                Но при работе с нашими собственными классами (или с классами, не относящимися к пакетам) нам может потребоваться быть более сообразительным.

                Автозагрузка Composer может работать одним из двух основных способов: посредством прямой автозагрузки классов или посредством использования стандартов PSR.

                Как напрямую автоматически загружать классы с помощью Composer?

                Диспетчер зависимостей Composer для PHP

                Самый простой способ – автозагрузка каждого класса по отдельности. Для этого все, что нам нужно сделать, это определить массив путей к классам, которые мы хотим автоматически загружать в файле composer.json.

                Обновите автозагрузчик композитора из командной строки:

                $ composer dump-autoload -o

                Теперь мы должны включить автозагрузчик в начало наших скриптов (например, index.php ):

                Точно так же, как мы автоматически загружаем классы, мы можем автоматически загружать каталоги, содержащие классы, используя ключ classmap автозагрузки:

                • Чтобы автоматически загружать каталоги, нам нужно использовать пространства имен.

                Как мы видим, автозагрузка карты классов не сильно отличается от длинного списка требований, которые мы использовали в старых PHP-скриптах. Тем не менее, лучший способ автозагрузки — использовать стандарт PSR-4.

                Как автоматически загрузить PSR-4?

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

                Нам необходимо предпринять следующие шаги, чтобы автоматически загружать наши классы с помощью PSR-4:

                ваш-сайт/
                источник/
                Db.php
                Page.php
                User.php

                б. Дайте классам пространство имен. Мы должны предоставить всем классам в каталоге src/ одно и то же пространство имен. Например, давайте дадим классам имя Acme. Вот как будет выглядеть класс Page:

                • Мы даем одно и то же пространство имен Acme всем классам в каталоге src/.
                <р>в. Укажите пространство имен на каталог src/ в файле composer.json. Мы указываем каталог, в котором хранятся классы, на пространство имен в файле composer.json. Например, вот как мы указываем в файле composer.json, что мы дали пространство имен Acme классам в каталоге src/:

                • Мы используем ключ psr-4.
                • Пространство имен Acme указывает на каталог src/.
                • Пространство имен должно заканчиваться на \\ . Например, "Акме\\" .
                • Общее название Acme можно заменить названием вашего бренда или веб-сайта.

                д. Обновите автозагрузчик Composer:

                $ composer dumpautoload -o

                <р>т.е. Импортируйте пространство имен в свои скрипты. Сценарии должны импортировать пространство имен, а также автозагрузчик, например, index.php:

                Как выполнить автозагрузку, если структура каталогов сложная?

                До сих пор мы демонстрировали автозагрузку классов, которые находятся непосредственно в папке src/, но как мы можем автоматически загружать класс, который находится в подкаталоге? Например, мы можем захотеть переместить класс Page в каталог Pages и, таким образом, создать следующее дерево каталогов:

                ваш-сайт/
                src/
                Db.php
                User.php
                Pages/
                Page.php

                Вот шаги, которые нам нужно выполнить:

                а. Переопределить пространство имен. Нам нужно дать классу Page пространство имен в соответствии с его новым расположением в каталоге src/Pages.

                б. Используйте пространства имен в сценариях:

                Заключение

                Как мы показали в двух последних руководствах, Composer — это мощный инструмент, который может помочь нам управлять и автоматически загружать наши собственные классы, а также другие. Теперь, когда у нас есть такой мощный инструмент, мы имеем право в полной мере насладиться лучшим, что может предложить современный PHP!

                Джозеф Бенхарош веб-разработчик

                Джозеф Бенхарош — полнофункциональный веб-разработчик и автор электронной книги "Основы объектно-ориентированного PHP".

                Если да, то вам может помочь электронная книга "Основы объектно-ориентированного PHP".

                eBook объектно-ориентированный PHP

                "The Essentials" – это подробное руководство, которое поможет вам быстро и легко повысить свою производительность и стать востребованным товаром на рынке труда.

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

                Читайте также: