Delphinum,
В общем смысле DI это такой механизм, который позволяет по имени члена класса или аргумента функции получить конкретный сервис.
Ну нет. Это уже детали реализации. Правильнее было бы сказать, что внедрение зависимостей -- это форма инверсии управления (Inversion Of Control, IOC).
В документации к PHP-DI очень хорошо описан этот паттерн:
Как приблизительно работает код, не использующий DI:
Application нуждается в Foo, поэтому:
Application создаёт Foo
Application вызывает Foo
Foo нуждается в Bar (e.g. a service), поэтому:
Foo создаёт Bar
Foo вызывает Bar
Bar нуждается в Bim, поэтому:
Bar создаёт Bim
Bar делает что-либо
Используя внедрение зависимостей:
Application нуждается в Foo, который нуждается в Bar, который нуждается в Bim, поэтому:
Application создаёт Bim
Application создаёт Bar и передаёт ему Bim
Application создаёт Foo и передаёт ему Bar
Application вызывает Foo
Foo вызывает Bar
Bar делает что-либо
Это и есть инверсия управления. Контроль зависимостей инвертирован от вызванного к вызывающему.