рджрд╛рдирд╛? рдирд╣реАрдВ ... рдореИрдВрдиреЗ рдирд╣реАрдВ рд╕реБрдирд╛

рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ PHP рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рд░рд▓ рдбрд┐ рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рднреА Habr├й рдкрд░ рдХреЛрдИ рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИред
рдХреНрдпреЛрдВ рд╢рд╛рдирджрд╛рд░? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб 80 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ - рдорд╣рд╛рди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡рд╕реНрддреБред
рдХрдВрдЯреЗрдирд░ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдВрдмрдВрдз рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

require_once '/path/to/Pimple.php'; 

рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛ рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реИ:

 $container = new Pimple(); 

рдХрдИ рдЕрдиреНрдп DI рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рддрд░рд╣, рдкрд┐рдВрдкрд▓ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ред


рдбрд┐рдХреНрд▓реЗрдпрд░ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕


рдкрд┐рдВрдкрд▓ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдХрдВрдЯреЗрдирд░ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 //   $container['cookie_name'] = 'SESSION_ID'; $container['session_storage_class'] = 'SessionStorage'; 


рд╕реЗрд╡рд╛ рдШреЛрд╖рдгрд╛


рдПрдХ рд╕реЗрд╡рд╛ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдЕрдкрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд╡рд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ: рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ, рдЖрджрд┐ред
Pimple рдореЗрдВ, рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЙрди рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:

 //   $container['session_storage'] = function ($c) { return new $c['session_storage_class']($c['cookie_name']); }; $container['session'] = function ($c) { return new Session($c['session_storage']); }; 

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

 //    $session = $container['session']; //      // $storage = new SessionStorage('SESSION_ID'); // $session = new Session($storage); 


рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реЗрд╡рд╛ рдШреЛрд╖рдгрд╛


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

 $container['session'] = $container->share(function ($c) { return new Session($c['session_storage']); }); 


рд╕рдорд╛рд░реЛрд╣ рдШреЛрд╖рдгрд╛


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

 $container['random'] = $container->protect(function () { return rand(); }); 


рдЙрдирдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡


рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рд╕реЗрд╡рд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдлрд┐рд░ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реЗрд╡рд╛ рдмрдирдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 $container['mail'] = function ($c) { return new \Zend_Mail(); }; $container['mail'] = $container->extend('mail', function($mail, $c) { $mail->setFrom($c['mail.default_from']); return $mail; }); 

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

 $container['twig'] = $container->share(function ($c) { return new Twig_Environment($c['twig.loader'], $c['twig.options']); }); $container['twig'] = $container->share($container->extend('twig', function ($twig, $c) { $twig->addExtension(new MyTwigExtension()); return $twig; })); 


рдПрдХреНрд╕реЗрд╕ рдлрдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ рд╕рд░реНрд╡рд┐рд╕


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

 $container['session'] = $container->share(function ($c) { return new Session($c['session_storage']); }); $sessionFunction = $container->raw('session'); 


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


рдпрджрд┐ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд┐рдВрдкрд▓ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╣реИ:

 class SomeContainer extends Pimple { public function __construct() { $this['parameter'] = 'foo'; $this['object'] = function () { return stdClass(); }; } } 

рдФрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕ рддреИрдпрд╛рд░ рдХрдВрдЯреЗрдирд░ рдХреЛ рджреВрд╕рд░реЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 $container = new Pimple(); //       // ... //    $container['embedded'] = $container->share(function () { return new SomeContainer(); }); //    $container['embedded']['parameter'] = 'bar'; //    $container['embedded']['object']->...; 


рдирд┐рд╖реНрдХрд░реНрд╖


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

рдкреБрдирд╢реНрдЪ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реАрдбрдореА рдкрд┐рдВрдкрд▓ рдХрд╛ рдЕрдиреБрд╡рд╛рджред

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


All Articles