рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?

рд╣рд╛, рдбрд┐ рдХреЗ рддрд╣рдд рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рднреЗрд╕ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рднреА рдПрдХ рдбрд┐ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ! :-)

рдпрд╣ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдХрд╛рд╢рди, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рд╣реИред рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рд╕рд╣рдХрд░реНрдореА рд╕рд╣рдЬреАрд╡рди рдпреВ рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, tkред рдпрд╣ рд╡рд╣ рдерд╛ рдЬреЛ рдПрдХ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдореЗрдВ рд╡рд┐рд╕рд░реНрдЬрди рдХрд╛ рдХрд╛рд░рдг рдмрди рдЧрдпрд╛ред рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдкреНрд░рд╢реНрди рдХреЗ рдореЗрд░реЗ рдЙрддреНрддрд░ рдореЗрдВ рдХрдЯреМрддреА рдХреЗ рддрд╣рддред


рдЫрд╡рд┐


(рдХреЗрдбреАрдкреАрд╡реА рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреА рджреГрд╢реНрдп рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рд╣реИ, рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ)


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗ ( рдХреБрдЫ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореИрдВ рдкреАрдПрдЪрдкреА рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛, рдХреБрдЫ рдЬреЗрдПрд╕ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рджреЛ рднрд╛рд╖рд╛рдПрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рд╕рдХреНрд░рд┐рдп рд╕рд╛рдорд╛рди рдореЗрдВ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдЪреБрд░рд╛ рд▓реЗрддрд╛ рд╣реВрдВ )ред


рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ DI - рдЖрд╡рд╢реНрдпрдХрддрд╛ / рдЖрдпрд╛рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдирд┐рд░реНрдорд╛рдг рдкреИрд░рд╛рдореАрдЯрд░ (рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯрд░) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЗрд╕ рдмрдбрд╝реЗ рд╢рдмреНрдж рдХреЗ рдкреАрдЫреЗ рд╕рд░рд▓ рд╣реИ "рдирд┐рд░реНрдорд╛рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХреА рдирд┐рд░реНрднрд░рддрд╛"ред

рд░рд╛рдЗрдЬрд╝рд┐рдпреЛрдореЙрдо рдХреЗ рд╕рд╣рдХрд░реНрдореА рдХреА рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдХрд╛рдлреА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдШрдЯрдирд╛ рдХрд╛ рд╕рд╛рд░ рдмрддрд╛рддреА рд╣реИред рдХреЛрдб рдХреА рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕рдордЭ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ - рдирд┐рд░реНрдорд╛рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ (рдЖрдорддреМрд░ рдкрд░, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛):


class MainClass { public function __construct($dep1, $dep2, $dep3) {} } 

рд╡рд╣ рд╕рдм рд╣реИред DI - рд╡рд╣ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╣рдореЗрдВ рдЬрд┐рди рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡реЗ рд╡рд╣рд╛рдВ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВред рдФрд░ рдЬрд╣рд╛рдВ рдпрд╣ "рдХрд┐рд╕реА рдХреЛ рд╡рд╣рд╛рдБ рд╕реЗ рдмрд╛рд╣рд░" рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ - рдбреАрдЖрдИ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЖрдВрддрд░рд┐рдХ" рдХреНрдпрд╛ рд╣реИ (рдФрд░ рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ), рдФрд░ рдХреНрдпрд╛ рдЖрддрд╛ рд╣реИ / рдЗрд╕ рдХреЛрдб рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдкрд░реЗ рд╣реИред рдпрд╣ рдПрдХреНрд╕рд╛рдЗрдЯрд┐рдВрдЧ рдбреАрдЖрдИ рд╣реИред рдХреНрдпреЛрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдмрд╕рдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рд╡рд╣ рддреБрд░рдВрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛрдб рдХреЗ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рджреЗрдЦрддрд╛ рд╣реИред рд╣рдо рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВ рдХрд┐ DI рд╡рд░реНрдЧ рд╕реНрддрд░ рдкрд░ рдХреБрдЫ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди / рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рднреА DI рд╣реИрдВ:


 function f(dep1, dep2, dep3) {} 

рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдиреНрдп рд╕рднреА рдХреЗ рдмреАрдЪ рдРрд╕рд╛ рд╣реА рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХрд╛ рд╣реИред


рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░


рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИред рд╡рд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:


 interface ServiceLocator { public function addInstance(string $class, Service $service); public function addClass(string $class, array $params); public function has(string $interface): bool; public function get(string $class): Service; } 

рд▓реЛрдХреЗрдЯрд░ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рддреИрдпрд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рдлрд┐рд░ рдЗрди рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд▓реЛрдХреЗрдЯрд░, рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд╕реНрддреБрдПрдВ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ - рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ рдФрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦреА рдЧрдИ рд╣реИрдВ рдпрд╛ рджрд┐рдП рдЧрдП рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред


рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╡рд╣ рд╕рдм рд╣реИред


рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрдВрдЯреЗрдирд░


DI рдХрдВрдЯреЗрдирд░ рдХреНрдпрд╛ рд╣реИ? " рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рд╕рд┐рджреНрдзрд╛рдВрдд, рдЕрднреНрдпрд╛рд╕ рдФрд░ рдкреИрдЯрд░реНрди " рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдлреНрд░реАрд╡реЗрдпрд░ рд░рд┐рдЯреЗрд▓рд┐рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░: "рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рдбреАрдЖрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрдкреЛрдЬрд╝рд┐рд╢рди, рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдФрд░ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдореИрдиреЗрдЬрдореЗрдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЗрдирд╡рд░реНрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг (IoC) рдХрдВрдЯреЗрдирд░ред (┬з3.2.2) "


рдпрд╣реА рд╣реИ, рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдореЗрдВ - рдЙрдирдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдПред рдПрдХ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдЯреЛрд░ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ (рдЬреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╛ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛)ред


рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рдореНрдлрдиреА DI рдХрдВрдЯреЗрдирд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:


 interface ContainerInterface extends PsrContainerInterface { public function set(string $id, ?object $service); public function get($id, int $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE); public function has($id); public function initialized(string $id); public function getParameter(string $name); public function hasParameter(string $name); public function setParameter(string $name, $value); } 

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реЛрдХреЗрдЯрд░ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИ - рд╕рдорд╛рди get , has рдФрд░ set / add ред


рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдЦрд░рд╛рдм рдХреНрдпреЛрдВ рд╣реИ?


рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВред рди рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрд╡рдпрдВ рдЦрд░рд╛рдм рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ " рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреИрдЯрд░реНрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡ рд╢рд░реНрдд рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред" рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЙрд▓реНрд▓рдВрдШрди:


 public class OrderProcessor : IOrderProcessor { public void Process(Order order) { var validator = Locator.Resolve<IOrderValidator>(); if (validator.Validate(order)) { var shipper = Locator.Resolve<IOrderShipper>(); shipper.Ship(order); } } } 

рдЬреИрд╕реЗ, рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реИ - рдЗрд╕ рддрд░рд╣:


 public class OrderProcessor : IOrderProcessor { public OrderProcessor(IOrderValidator validator, IOrderShipper shipper) public void Process(Order order) } 

рдЕрд░реЗ, рд╣рдордиреЗ рд╕рд┐рд░реНрдл IOrderValidator рдФрд░ IOrderShipper рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдХреНрд╖рдг рдХреЗ рдмреНрд░реИрдХреЗрдЯ рдХреЛ IOrderValidator рд╣реИ! рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдХреБрдЫ рдЗрд╕ рдХреЛрдб рдХреА рддрд░рд╣ рд╣реИ:


 var validator = Locator.Resolve<IOrderValidator>(); var shipper = Locator.Resolve<IOrderShipper>(); var processor = new OrderProcessor(validator, shipper); processor.Process(order); 

рд░рдЪрдирд╛ рдЬрдбрд╝


рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдкрд╣реБрдВрдЪреЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдХрдВрдкреЛрдЬрд┐рдЯ рд░реВрдЯ (рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕реЗ "рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд╡рд╛рдЗрдВрдЯ" рдХрд╣реВрдВрдЧрд╛)ред рдпрд╣ рд╡рд╣реА " рдХреЛрдИ " рд╣реИ рдЬрд┐рд╕ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЕрд╕реЗрдВрдмрд▓реА рдкреЙрдЗрдВрдЯ рдкрд░, рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдпрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕реЗрд╡рд╛рдУрдВ рд▓реЛрдХреЗрдЯрд░ рдФрд░ DI рдХрдВрдЯреЗрдирд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдиреНрдпреВрдирддрдо рд╣реИрдВред рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдФрд░ рджреВрд╕рд░реА рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреЛрдИ рдмреБрдирд┐рдпрд╛рджреА рдорддрднреЗрдж рдирд╣реАрдВ рд╣реИрдВред


рдореБрдЦреНрдп рдЕрдВрддрд░


рдФрд░ DI рд▓реЛрдХреЗрдЯрд░ рдФрд░ рдХрдВрдЯреЗрдирд░ рдХреА рд╕реЗрд╡рд╛рдУрдВ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд╣рд╛рдБ рд╣реИрдВ? рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдВрдЯреЗрдирд░ рддрдХ рд╕реНрдерд┐рд░ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде:


 $obj = Container::getInstance()->get($objId); 

рдпрд╣рд╛рдБ рдпрд╣ рд╣реИред рдЗрд╕ рд░реВрдк рдореЗрдВ, рдХрд╣реАрдВ рднреА (рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд╡рд╛рдЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рд╕реНрдереИрддрд┐рдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рдВрджрд┐рдЧреНрдз рд╣реИ), рдХреЛрдИ рднреА рдХрдВрдЯреЗрдирд░ рд╕рд░реНрд╡рд┐рд╕ рд▓реЛрдХреЗрдЯрд░ рдирд╛рдордХ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдмрди рдЬрд╛рддрд╛ рд╣реИред


рдПрдХ VolCh рд╕рд╣рдХрд░реНрдореА рдиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдФрд░ рдореЗрд░реЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛:


рдФрд░ рдЖрдкрдХреЛ рдХреИрд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдЪреНрдЪрд╛ DI рдПрдХ DI рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪреНрдЫрдиреНрди рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рд╕реЗ рдЕрд▓рдЧ рд╣реИ?

рдЗрд╕ рддрд░рд╣:


рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреВрд░рд╛ рдкреНрд░рдХрд╛рд╢рди рдпрд╣рд╛рдБ рдЙрдирдХреЗ рдЙрддреНрддрд░ рдХреА рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рддреИрдирд╛рддреА рд╣реИред


рдХрдВрдЯреЗрдирд░ рдХрд╛ рдХрд╛рдиреВрдиреА рдЙрдкрдпреЛрдЧ


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪрд╛рд╣реЗ рдХрдВрдЯреЗрдирд░ рдПрдХ DI рдХрдВрдЯреЗрдирд░ рд╣реЛ рдпрд╛ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдмрд┐рдВрджреБ рдкрд░, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрдВрдЯреЗрдирд░ рдЦреБрдж рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ рддреЛ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?


 class Foo { public function __construct(Container $container){} } 

рдлрд┐рд░, рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рджреЛ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░реЗ рдХреЛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред


 class Foo { private $dep; public function __construct(Container $container) { $this->dep = $container->get('depId'); } } 

 class Foo { private $container; public function __construct(Container $container) { $this->container = $container; } public function initModules($modules) { foreach ($modules as $initClassId) { $init= $this->container->get($initClassId); $init->exec(); } } } 

рд╕рд╛рд░рд╛рдВрд╢


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, DI рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд DI рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DI рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ - рдЖрдкрдХреЛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдкреБрдирд╢реНрдЪ
рдореИрдВ рд╕рд░реНрдЧреЗрдИ рдЯреЗрдкреНрд▓рд╛рдХреЛрд╡ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рд╛рдорд╛рди рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ - рдпреЗ рдореБрджреНрджреЗ рд╡рд╣рд╛рдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред

Source: https://habr.com/ru/post/hi465395/


All Articles