В чем разница между dependency injection и методом, который возвращает тип класса?

В чем разница между dependency injection и методом, который возвращает тип класса. В обеих случаях мы получаем доступ к методом класса. В чем отличие?

interface Foo {
}

class Bar {
  public function getMethod(Foo $foo) {

  }
}

class Second {
  public function getMethod(): Foo {
  }
}
  • Вопрос задан
  • 567 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
В чем разница между поехать в отпуск и футболом?
И в том и в другом случае мы будем носить обувь.
Вот пример: в холодильник можно поставить пиво, а по карточке можно снять деньги в банкомате.

Ты, во-первых, не понимаешь что такое dependency injection, а во-вторых - что делает твой код.

Если отбросить все умные и красивые слова которые ты тут наскреб по сусекам, то оба твоих примера - про type hinting. Только в первом кусочеке кода мы просим интерпретатор проверять входящий параметр, а во втором - возвращаемое значение.
Type hinting двольно размытый термин, мне больше нравится "контроль типов", который используется в документации. Поскльку в данном случае это не "подсказка", а строгий контроль: скрипт упадёт с ошибкой если в первом примере в метод придет что-то отличное от класса реализующего интерфейс Foo, а во втором - если метод вернет что-то отличное от такого класса.

Контроль типов надо использовать, чтобы твой код был чище и работал предсказуемее.

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

Войдите, чтобы написать ответ

Похожие вопросы