02 - Контейнер для внедрения зависимостей
Контейнер внедрения зависимостей Joomla, сокращенно DIC, по сути, представляет собой хранилище пар ключ - значение, где:
- ключ - это строка, которая (обычно) является полным именем класса или интерфейса
- значение представляет собой экземпляр соответствующего класса или функцию, которая возвращает экземпляр этого класса.
На самом деле не имеет значения, на что установлен ключ - главное, чтобы он был понятным и вы использовали один и тот же ключ для ввода и удаления записей. Конечно, он должен быть уникальным.
Вы кладете вещи в контейнер, используя set()
проходящий:
- key = имя класса или интерфейса.
- value = функция, которая возвращает экземпляр класса (или значением может быть просто экземпляр класса, без функции - оболочки)
- shared - логическое значение, определяющее, может ли экземпляр класса быть общим или нет (т. е., если есть второй запрос к DIC для предоставления этого экземпляра, возвращает ли он тот же экземпляр или новый)
- protected - логическое значение, определяющее, защищена ли эта запись в контейнере DI или нет (при попытке перезаписать защищенную запись путем вызова будет выдана ошибка
set()
снова используя тот же ключ).
Функция share()
это в основном то же самое, что и set()
с общим логическим значением, равным true.
Вы достаете вещи из контейнера, позвонив по телефону get()
передача ключа нужного ресурса. Функциональность DI позволит
- найти ключ в контейнере
- если значение еще не является экземпляром класса, то оно запустит соответствующую функцию для создания экземпляра класса
- если ресурс является общим, он сохранит экземпляр класса, так что при последующих вызовах
get()
он может просто вернуть экземпляр - верните вам экземпляр класса
Вы также можете определить псевдонимы для каждого ключа в контейнере, что означает, что вы вызываете get()
передача либо ключа, либо псевдонима ключа.