02 - Контейнер для внедрения зависимостей
Контейнер внедрения зависимостей Joomla, сокращенно DIC, по сути, представляет собой хранилище пар ключ - значение, где:
- ключ - это строка, которая (обычно) является полным именем класса или интерфейса
- значение представляет собой экземпляр соответствующего класса или функцию, которая возвращает экземпляр этого класса.
На самом деле не имеет значения, на что установлен ключ - главное, чтобы он был понятным и вы использовали один и тот же ключ для ввода и удаления записей. Конечно, он должен быть уникальным.

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