рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╣реИ, рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдФрд░ рдиреЛрдбреНрдЬ рдореЗрдВ рдПрдХ рд╣реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдкреИрд░рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рдеред

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

PHP рдореЗрдВ (рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА DI рдкрд░рдВрдкрд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рднрд╛рд╖рд╛, рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╕рд╛рдорд╛рди рд╣реИ, рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж JS рдкрд░ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛) рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ:
class Config { public function __construct() { } } class Service { private $config; public function __construct(Config $config) { $this->config = $config; } } class Application { private $config; private $service; public function __construct(Config $config, Service $service) { $this->config = $config; $this->service = $service; } }
рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдПрдХ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реАрдЧ / рдХрдВрдЯреЗрдирд░ ), рдпрджрд┐ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рддреЛ Application
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ Application
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдЕрдкрдиреА Service
рдФрд░ Config
рдирд┐рд░реНрднрд░рддрд╛ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░реНрднрд░рддрд╛ рдкрд╣рдЪрд╛рдирдиреЗ рд╡рд╛рд▓реЛрдВ
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрдЯреЗрдирд░ рдХреИрд╕реЗ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ Application
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рджреЛ Config
рдФрд░ Service
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдкрд░рд╛рд╡рд░реНрддрди рдПрдкреАрдЖрдИ ( рдЬрд╛рд╡рд╛ , рдкреАрдПрдЪрдкреА ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рд╡рд╕реНрддреБ рдХреЛрдб рдХрд╛ рд╕реАрдзреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ (рдХреЛрдб рдПрдиреЛрдЯреЗрд╢рди)ред рдпрд╣реА рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЙрди рдЪрд░ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдЗрдирдкреБрдЯ рдкрд░ рджреЗрдЦрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рднрд╛рд╖рд╛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рд╣рдо рдЗрди рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдпрд╛ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рддрд╣рдд рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди")
$container->add("configuration", $config);
рдФрд░ рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рдирд┐рдпрдо, рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рд╡рд╕реНрддреБ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдЙрд╕рдХреЗ рдХреЛрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдирд┐рдпрдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЛрдб, XML, JSON, ... рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдкрд┐рдВрдЧ)
[ ["object_id_1", "/path/to/source1.php"], ["object_id_2", "/path/to/source2.php"], ... ]
рдпрд╛ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ:
public function getSource($id) {. return "/path/to/source/${id}.php"; }
PHP рдореЗрдВ, рдЕрдкрдиреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдо рдорд╛рдирдХреАрдХреГрдд рд╣реИрдВ ( PSR-4 ), рдЬрд╛рд╡рд╛ рдореЗрдВ, рдорд┐рд▓рд╛рди JVM ( рдХреНрд▓рд╛рд╕ рд▓реЛрдбрд░ ) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЦреЛрдЬ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдирд╛рдо рдЕрдЪреНрдЫреЗ рдкрд░реНрдпрд╛рдкреНрдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИрдВред
рдиреЗрдорд╕реНрдкреЗрд╕
рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреГрддреАрдп-рдкрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ (рдорд╛рд╡реЗрди, рд╕рдВрдЧреАрддрдХрд╛рд░, рдПрдирдкреАрдПрдо) рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдмрдврд╝ рдЧрдИ рд╣реИред Namespaces рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдХреЛрдб рддрддреНрд╡реЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ (рд╡рд░реНрдЧреЛрдВ, рдХрд╛рд░реНрдпреЛрдВ, рд╕реНрдерд┐рд░рд╛рдВрдХ) рд╕реЗ рдПрдХрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рд╢реБрд░реВ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬрд╛рд╡рд╛):
package vendor.project.module.folder;
рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдирд╛рдо рд╕реНрдерд╛рди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ (PHP):
namespace Vendor\Project\Module\Folder;
рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
\Doctrine\Common\Annotations\Annotation\Attribute::$name
рдиреЗрдорд╕реНрдкреЗрд╕ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рддрддреНрд╡реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрдирдХреЗ рдмреАрдЪ рди рдХреЗрд╡рд▓ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ - рдЬрд╛рд╡рд╛ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
$container->add(\Vendor\Project\Module\ObjectType::class, $obj);
рдХреЛрдб рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк
PHP composer
рдореЙрдбреНрдпреВрд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ composer.json
рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред composer.json
рдореЙрдбреНрдпреВрд▓ рд╡рд┐рд╡рд░рдгрдХ рдореЗрдВ:
"autoload": { "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } }
JS рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рд╣реЛрдиреЗ рдкрд░ JS рд╕рдореБрджрд╛рдп package.json
рдореЗрдВ рд╕рдорд╛рди рдореИрдкрд┐рдВрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЬреЗрдПрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
рдКрдкрд░, рдореИрдВрдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд╛рдо рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐:
- JS рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
- JS рдорд┐рдирд┐рдлрд╛рдпрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рдУрд╡рд▓рд┐рдХреНрд╕ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
class UserController { constructor(opts) { this.userService = opts.userService } }
JS рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдореЗрдВ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рд╡рд░реНрдг, "_" рдФрд░ "$" рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдЕрдВрдХ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдСрдЯреЛрд▓реИрдб рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдирдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП "$" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫреЛрдбрд╝рдирд╛ рдФрд░ PHP рдХреЗ рдЕрдиреБрднрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред namespace
рд╕рдВрдЪрд╛рд▓рдХ рдХреБрдЫ рдЪреМрдЦрдЯреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Zend 1 рдореЗрдВ), рдирд┐рдореНрди рдирд╛рдо рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдереЗ:
class Zend_Config_Writer_Json {...}
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЬреЗрдПрд╕ рдкрд░ рддреАрди рд╡рд╕реНрддреБрдУрдВ ( Application
, Config
, Service
) рдХреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд░реНрд╢рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
class Vendor_Project_Config { constructor() { } } class Vendor_Project_Service { constructor({Vendor_Project_Config}) { this.config = Vendor_Project_Config; } } class Vendor_Project_Application { constructor({Vendor_Project_Config, Vendor_Project_Service}) { this.config = Vendor_Project_Config; this.service = Vendor_Project_Service; } }
рдпрджрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХрд╛ рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
export default class Vendor_Project_Application { constructor({Vendor_Project_Config, Vendor_Project_Service}) { this.config = Vendor_Project_Config; this.service = Vendor_Project_Service; } }
рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
./src/
./Application.js
./Config.js
./Service.js
рддрдм рд╣рдо рдХрдиреНрдЯреЗрдирд░ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдорд╛рдбреНрдпреВрд▓ рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ "рдиреЗрдорд╕реНрдкреЗрд╕" рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
const ns = "Vendor_Project"; const path = path.join(module_root, "src"); container.addSourceMapping(ns, path);
рдФрд░ рдлрд┐рд░, рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рдирд┐рд░реНрднрд░рддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( ${module_root}/src/Config.js
) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрд░реЛрддреЛрдВ ( ${module_root}/src/Config.js
) рдХреЗ рд▓рд┐рдП рдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред
ES6 рдореЙрдбреНрдпреВрд▓
ES6 ES6 рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ :
import { something } from 'path/to/source/with/something';
рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдХреНрд▓рд╛рд╕) рдХреЛ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдЕрдЯреИрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕ рдореЗрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ:
export default class Vendor_Project_Path_To_Source_With_Something {...}
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рд▓рдВрдмрд╛ рдирд╛рдо рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдмрд╕ Something
рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди Zend 1 рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓рд┐рдЦрд╛ рдФрд░ рдирд╣реАрдВ рдЯреВрдЯрд╛, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рднреАрддрд░ рд╡рд░реНрдЧ рдирд╛рдо рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдЖрдИрдбреАрдИ рдХреА рджреЛрдиреЛрдВ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ (рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рдВрдХреЗрдд), рдЗрд╕рд▓рд┐рдП рдФрд░ рдЬрдм рдбрд┐рдмрдЧрд┐рдВрдЧ:

рдПрдХ рд╡рд░реНрдЧ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
import Something from 'path/to/source/with/something'; const something = new Something();
рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХрд╛ рдЖрдпрд╛рдд
рдЖрдпрд╛рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдиреЛрдбрдЬ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдиреЛрдбрдЬ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрдпрд╛рдд рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ:
import path from "path";
рд╣рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
Failed to resolve module specifier "path". Relative references must start with either "/", "./", or "../".
рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдиреЛрдбрдЬ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗ, рддреЛ рд╣рдо рдЙрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдиреЛрдбрдЬ рдХреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рд╕рд╛рдВрд╕ рдХреИрд╕реЗ рд▓реЗрдВ?
рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ DI рдХрд╛ рд╕реНрдерд╛рди
рдпрд╣ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд╛рдп рд╣реИ, рдЬреИрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдмрд╛рдХреА рд╕рдм рдХреБрдЫред
рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЬреЗрдПрд╕ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдореЛрд░реНрдЪреЗ рдкрд░ рдЕрдкрдиреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рд▓рдЧрднрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рдХрд▓реНрдк рдХреЗред рд╕рд░реНрд╡рд░ рдХреА рдУрд░, рдЬрд╛рд╡рд╛, рдкреАрдПрдЪрдкреА, .рдиреЗрдЯ, рд░реВрдмреА, рдЕрдЬрдЧрд░, рдШрдиреЗ рд░реВрдк рдореЗрдВ рдЦреЛрджрд╛ рдЧрдпрд╛ ... рд▓реЗрдХрд┐рди рдиреЛрдбрдЬ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рднреА рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ред рдФрд░ рдбреАрдЖрдИ рд╕рд╣рд┐рдд рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬреЗрдПрд╕ рдХреЛ рднреЗрджрдиреЗ рд▓рдЧреАрдВред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреЛрдб рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕реА рдЬреЗрдПрд╕ рдХреА рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЬрдиреНрдордЬрд╛рдд рд╣реИред рдЕрдм рд╕рд░реНрд╡рд░ рдФрд░ рд╕рд╛рдордиреЗ рджреЛрдиреЛрдВ рдкрд░ рдЬреЗрдПрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд┐рд╕реА рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рджреЛрдиреЛрдВ рд╕рд┐рд░реЛрдВ рдкрд░ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИред рдФрд░ рд╡рд╣реА рдХреЛрдбред рдмреЗрд╢рдХ, рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рджреЛрдиреЛрдВред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЬрдЯрд┐рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рд╕рд░реНрд╡рд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд╣реЛрдВрдЧреЗред
DI рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдореЗрдВ:
define( ["./config", "./service"], function App(Config, Service) {} );
рд╕рдЪ рд╣реИ, рдпрд╣рд╛рдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рд╕реВрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддреБрд░рдВрдд рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдк рдмреВрдЯрд▓реЛрдбрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдбреАрдЖрдИ рди рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░, рдмрд▓реНрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рднреА рдореМрдЬреВрдж рд╣реИред
рдорд╛рдЗрдХрд▓ рдЬреИрдХреНрд╕рди рдХрд╛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ?
рдЬрдм рдЖрдк рдИрдПрд╕-рдореЙрдбреНрдпреВрд▓ рд╕рдорд░реНрдерди рдХреЛ рдиреЛрдбрдЬ (рдлреНрд▓реИрдЧ --experimental-modules
) рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрдВрдЬрди рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ *.mjs
рд╕рд╛рде рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ ( *.mjs
рд╕рд╛рде рдХреЙрдорди-рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХрднреА-рдХрднреА " рдорд╛рдЗрдХрд▓ рдЬреИрдХреНрд╕рди рд╕рдорд╛рдзрд╛рди " рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдорд╛рдЗрдХрд▓ рдЬреИрдХреНрд╕рди рд╕реНрдХреНрд░рд┐рдкреНрд╕ ( *.mjs
) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдХреЗрдбреАрдкреАрд╡реА рдХреЗ рд╕рд╛рде рдЗрддрдиреА рд╕рд╛рдЬрд╝рд┐рд╢ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди ... рджреЛрд╕реНрддреЛрдВ рдХрд╛ рдХреИрдореЛрди , рдорд╛рдЗрдХрд▓ рдЬреИрдХреНрд╕рди ...
рдлрд┐рд░ рднреА рдПрдХ рдФрд░ DI рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЦреИрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдореНрдореАрдж рдереА, рдЕрдкрдирд╛ рдмрд╛рдЗрдХ DI рдореЙрдбреНрдпреВрд▓ - @ teqfw / di
рдпрд╣ рддреИрдпрд╛рд░-рдЯреВ-рдлрд╛рдЗрдЯ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдореМрд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдИрдПрд╕-рдореЙрдбреНрдпреВрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдиреЛрдбрдЬ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдУрдкрд┐рд▓рд┐рдХреНрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
constructor(spec) { /** @type {Vendor_Module_Config} */ const _config = spec.Vendor_Module_Config; /** @type {Vendor_Module_Service} */ const _service = spec.Vendor_Module_Service; }
рдкрд┐рдЫрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
import Container from "./src/Container.mjs"; const container = new Container(); container.addSourceMapping("Vendor_Module", "../example"); container.get("Vendor_Module_App") .then((app) => { app.run(); });
рд╕рд░реНрд╡рд░ рдкрд░:
$ node --experimental-modules main.mjs
рд╕рд╛рдордиреЗ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП ( example.html
):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>DI in Browser</title> <script type="module" src="./main.mjs"></script> </head> <body> <p>Load main script './main.mjs', create new DI container, then get object by ID from container.</p> <p>Open browser console to see output.</p> </body> </html>
рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдореЙрдбреНрдпреВрд▓ рдбрд╛рд▓рдиреЗ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ example.html
рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛ рдЖрдИрдбреАрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)ред рдпрджрд┐ рдЖрдк example.html
рд╕реАрдзреЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ Chrome рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИ:
Access to script at 'file:///home/alex/work/teqfw.di/main.mjs' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ рдХрдВрд╕реЛрд▓ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдиреЛрдбрдЬ) рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
Create object with ID 'Vendor_Module_App'. Create object with ID 'Vendor_Module_Config'. There is no dependency with id 'Vendor_Module_Config' yet. 'Vendor_Module_Config' instance is created. Create object with ID 'Vendor_Module_Service'. There is no dependency with id 'Vendor_Module_Service' yet. 'Vendor_Module_Service' instance is created (deps: [Vendor_Module_Config]). 'Vendor_Module_App' instance is created (deps: [Vendor_Module_Config, Vendor_Module_Service]). Application 'Vendor_Module_Config' is running.
рд╕рд╛рд░рд╛рдВрд╢
AMD, CommonJS, UMD?
ESM !