Зависимость инъекции предоставляет вашему приложению то, что ему нужно для работы, а это любые данные. Большинство приложений являются модульными, они ведут себя как сегментные компоненты или сущности. Но все должны принять в что-то функционировать.
Таким образом, они нуждаются в их зависимости.
Это может быть передано через класс-конструктор, который идеален, когда инициализируется объект, который является первой вызывающей функцией, поэтому все, что нужно для работы вашего приложения, может быть передано через конструктор. Но иногда вы можете передавать данные непосредственно к методу в качестве аргумента в вашей функции/метода Ex:
# Generic Input validator
class InputValidator{
function isEmailValid($email){}
}
# Our main application
class UserRegistration(){
function Register($inputValidator){
$isEmailValid = $inputValidator->isEmailValid('[email protected]');
}
}
# Instanciating the class and providing the dependancy
(new UserRegistration)->Register(new InputValidator());
В приведенном выше примере, UserRegistration->Register()
зависит от класса InputValidator()
зарегистрировать пользователя, мы могли бы при условии, что валидатор электронной почты непосредственно в классе UserRegistration
, но мы решили передать его как зависимость, вместо того чтобы сделать наше приложение в целом S.O.L.I.D совместимым.
Итак, вкратце мы вводим там зависимость. Это инъекция зависимостей.
Type Hinting есть, гораздо проще понять.
В принципе, если мы продолжим наш предыдущий пример, и если вы проверяете Register(new InputValidator());
вы можете увидеть, что мы прошли это в классе он должен работать, а кто-то по ошибке может также передать другой класс или даже строку, такие как: Register('something');
который бы разорвать приложение, поскольку Метод Register
не нуждается в строке. Чтобы предотвратить это, мы можем набрать его, другими словами сообщить функции Register
только для принятия определенного типа данных: array, object, int ... или мы можем даже явно сообщить ему, чтобы взять имя класса, предоставив его перед
$InputValidator = new InputValidator();
Register(InputValidator $InputValidator);
, как для композиции, это лучше прочитать, что я могу предоставить What is composition as it relates to object oriented design?
Тип намекая: Добавление типа перед переменной в функции параметры волнолома '(Person $ человек)' – RiggsFolly
зависимостях Injection: Передача объекта Person в конструктор бизнес классов – RiggsFolly
В Symfony 3.3 типа намекая любой метод также обеспечивает инъекция зависимостей: т.е. предоставляет доступный глобальный сервис этому методу. Это чертовски сложно. Словения меняется повсеместно. – RichieHH