рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ,

рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ: рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рд╣рдо рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рдореМрдЬреВрджрд╛ рд╕реНрддрд░ рдкрд░ - рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ - рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдВрдд-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рддрдереНрдп рд╣рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХреЛрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ AOP рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╛ рдЧреАрд▓рд╛ рдХреЛрдб
рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рдЧрднрдЧ 95% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде, рдЖрдк
рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЛрдбрд┐рдВрдЧ, рд▓реЙрдЧрд┐рдВрдЧ, рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ, рд▓реЗрди-рджреЗрди рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рднреЗрджрднрд╛рд╡ рдХреА рдЖрдбрд╝ рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВред рдЖрдк рдирд╛рдо рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рднреА рдЖрд╡реЗрджрди рдкрд░рддреЛрдВ рдкрд░ рд▓рд╛рдЗрд╡ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдмрд▓реЛрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП (рдЖрдк рднреА рдкрд░рддреЗрдВ рд╣реЛрддреА рд╣реИрдВ?):
рд╕реВрдЦреА рдФрд░
KISS ред DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ
WET рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб "рдЧреАрд▓рд╛" рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓рд╛рдЗрдиреНрд╕ рдСрдлрд╝ рдХреЛрдб (LOC),
рднрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдЧрдгрдирд╛ (WMC),
рд╕рд╛рдЗрдХреНрд▓реЛрдореИрдЯрд┐рдХ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕рд┐рдЯреА (CCN)
рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрд╕рд▓ рдЬрд╝рд┐рдВрджрдЧреА рдореЗрдВ рдРрд╕рд╛ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред рддрдХрдиреАрдХреА рдХрд╛рд░реНрдп рдЖрддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рдШрдЯрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдкреНрд░рдгрд╛рд▓реА рдПрдХрджрдо рд╕рд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдФрд░ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдФрд░ рдлрд┐рд░ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ
рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдУрдУрдкреА рдореЗрдВ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрджреА рд╣реИ, рдФрд░ рдХреЛрдИ рднреА рдХреБрдЫ рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╛рдирдХ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪрд▓рддреА рд╣реИ, рд╡рд░реНрд╖реЛрдВ рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рдзрд┐ рдХрд╛ рддрд░реНрдХ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
public function createNewUser($newUsername) { $user = new User(); $user->setName($newUsername); $this->entityManager->persist($user); $this->entityManager->flush(); }
... рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА 3 рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
public function createNewUser($newUsername) { if (!$this->security->isGranted('ROLE_ADMIN')) { throw new AccessDeniedException(); } $user = new User(); $user->setName($newUsername); $this->entityManager->persist($user); $this->entityManager->flush(); }
... рддреЛ рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдФрд░ рд▓рд╛рдЗрдиреЗрдВ
public function createNewUser($newUsername) { if (!$this->security->isGranted('ROLE_ADMIN')) { throw new AccessDeniedException(); } $this->logger->info("Creating a new user {$newUsername}"); $user = new User(); $user->setName($newUsername); $this->entityManager->persist($user); $this->entityManager->flush(); $this->logger->info("User {$newUsername} was created"); }
рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ? рдЕрднреА рддрдХ рдирд╣реАрдВ? рдлрд┐рд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ 5 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдореЗрдВ, рдХреИрд╢ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ 5 рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЛрдб рдХреА 4 рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдЬрд┐рдирдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓реНрдп рд╣реИ, рдЖрдк рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 20 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреНрдпрд╛ рдзрдордХреА рджреЗрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛, рдХреИрд╢, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдореЛрдЬрд╝реЗрдХ рдХреЛ рдкрд░реНрдЪреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЪреВрдБрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрдереНрдп рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреВрд░реЗ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХреЛрдб рдЬрд┐рддрдирд╛ рдкреБрд░рд╛рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдЪрд░реЗ рдХреЗ рд╕рд╛рде рдЙрдЧ рдЖрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдореМрдЬреВрджрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рджреЗрдЦреЗрдВред
рд╕реНрд╡рдЪреНрдЫрддрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдХреБрдВрдЬреА рд╣реИ! рдкрд╣рд▓реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп!
рдореИрдВ рдЖрд╡реЗрджрди рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ: "рдХреЛрдб рд╕реНрд╡рдЪреНрдЫрддрд╛ рдЖрд╡реЗрджрди рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдХреБрдВрдЬреА рд╣реИ! рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд╣рд▓реЗ рд╣реИ! " рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рд╛рдордиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдХреЗрдд рдХреЛ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП :)
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдХреЛрдб рдХреЛ рд╕рд╛рдл рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдФрд░ рд╣рдо рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕рдЬреНрдЬрд╛рдХрд╛рд░
рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдкрд╣рд▓реА рдЪреАрдЬ рд╣реИ рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИред
рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдбрд┐рдЬрд╛рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╡рд░реНрдЧ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдПрдХ рд▓рдЪреАрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЬрдм
рдПрдУрдкреА рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬреЛ рдУрдУрдкреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрдорддреМрд░ рдкрд░ рдкреВрдЫрддреЗ рд╣реИрдВ, рд╡рд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдФрд░ рдареАрдХ рд╣реА рддреЛ рд╣реИ! рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдУрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ... рдПрдХ рдХрд╛рдЙрдВрдЯрд░-рдЙрджрд╛рд╣рд░рдг: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдХреИрд╢рд┐рдВрдЧрдбреЗрдХрдЯреЛрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд▓реЙрдЧрд┐рдВрдЧрдбреЗрдХрдЯреЛрд░реЗрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдж рдореЗрдВ, рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░? рдЗрди рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдорд╛рди рдХреЛрдб рд╣реЛрдВрдЧреЗ? рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рдХрд┐рддрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╣реЛрдВрдЧреЗ?
рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 100 рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ 100 рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдХреИрд╢рд┐рдВрдЧ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдиреНрдп 100 рдХрдХреНрд╖рд╛рдПрдВ рдЬреБрдбрд╝ рдЬрд╛рдПрдВрдЧреАред рдмреЗрд╢рдХ, рдпрд╣ рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ (рдХрд┐рд╕реА рднреА рдмрдбрд╝реЗ рдврд╛рдВрдЪреЗ рдХреЗ рдХреИрд╢ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦреЗрдВ), рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрди 100 рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд╕рд╣рдордд рд╣реИрдВ?
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдордзреНрдпрдо рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИред
рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдПрдВ
рдкреНрд░реЙрдХреНрд╕реА рдХреНрд▓рд╛рд╕реЗрд╕ рджреВрд╕рд░реА рдЪреАрдЬ рд╣реИ рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИред
рдкреНрд░реЙрдХреНрд╕реА - рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ)ред
рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкреНрд░реЙрдХреНрд╕реА рдХреИрд╢ рд╕реБрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрддрдиреА рдмрд╛рд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди: рдХрд╛рдо рдХреА рдЧрддрд┐ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ (__call, __get, __callStatic, call_user_func_array рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдФрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧрд╣рд┐рдВрдЯ рднреА рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреИрд╢рд┐рдВрдЧ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣ рдмрджрд▓реЗ рдореЗрдВ, рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░, рдЧрддрд┐ рдкрд░рд┐рдорд╛рдг рдХреЗ рдПрдХ рдХреНрд░рдо рд╕реЗ рдЧрд┐рд░ рдЬрд╛рдПрдЧреАред
рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд▓рд╕ рд╣реИ: 100 рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреИрд╢рд┐рдВрдЧ рдкреНрд░реЙрдХреНрд╕реА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди! 100 рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧрд╣рд┐рдВрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдХреАрдордд рдкрд░, рдЬреЛ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдШрдЯрдирд╛рдУрдВ рдФрд░ рдкреНрд░реЗрдХреНрд╖рдХ рдкреИрдЯрд░реНрди
рдкреНрд░реЗрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрджреНрднреБрдд рдкреИрдЯрд░реНрди рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдСрдмреНрдЬрд░реНрд╡рд░ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИред рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ, рдкреНрд░рдХрд╛рд╢рдХ-рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдИ рдкреНрд░рд╕рд┐рджреНрдз рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХрдИ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдереА, рдФрд░ рд╕рдмрд╕реЗ рд╕рдлрд▓ рдФрд░ рд╕рдордЭ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рдореЙрдбрд▓ рдерд╛ред рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рд╕реЗ, рд╣рдо рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рдХрд░, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдХреНрд░рдо рдореЗрдВ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛, рд▓рдЧрднрдЧ рдПрдУрдкреА!
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд▓рдЪреАрд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдПрдУрдкреА рдирд╣реАрдВ рдерд╛, рддреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рддрд░реАрдХреЛрдВ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ZF2, Symfony2ред Symfony2 рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ
рдорд╣рд╛рди рд▓реЗрдЦ рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рднреА, рд╕рднреА рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрдИ рдмрдбрд╝реЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВ рдЬреЛ рдХрднреА-рдХрднреА рдлрд╛рдпрджреЗ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЛрдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреНрдпрд╛ рдФрд░ рдХрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЕрдХреНрд╕рд░ рдЕрдЬреНрдЮрд╛рдд рд╣реИред рджреВрд╕рд░рд╛ рдорд╛рдЗрдирд╕ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдПрдХ рдШрдЯрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд┐рдореНрдлрдиреА 2):
class Foo {
рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ
рдпрд╣
рдкреИрдЯрд░реНрди , рдЗрд╕рдХреЗ рд╕рд╛рд░ рдореЗрдВ, рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЛрд╣рд░рд╛рдпрд╛ рдХреЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ, рдореИрдВ рд▓рд┐рдерд┐рдпрдо рдврд╛рдВрдЪреЗ рдХреЗ рдореВрд▓ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдзреНрдпрдпрди рд╕реЗ рдЙрдиреНрдирдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднреА рдмрд╣реБрдд рд╕реА рдирдИ рдЪреАрдЬреЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд▓рд┐рдерд┐рдпрдо рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓рдмреИрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдХрд╛ рд▓реЙрдЧ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рдХреБрдЫ рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ:
use lithium\analysis\Logger; use lithium\data\Connections;
рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк
рдХреЛ рдлрд┐рд▓реНрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдПрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рдерд┐рдпрдо рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд╣рд▓реВ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд╣ рдкреНрд░реЗрд░рдгрд╛ рдмрди рд╕рдХрддреА рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдУрдкреА рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЙрддрд░ рдЬрд╛рдПрдЧреАред
рдкрд╣рд▓реВ рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ
рддреЛ, рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ - рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХреЛрдб рдХреЗ рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
PHP рдХреЗ рд▓рд┐рдП
Habr рдкрд░
AOP рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рдереЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ рдФрд░ рдЙрди рд╢рд░реНрддреЛрдВ рдФрд░ рдЙрди рддрдХрдиреАрдХреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рджреВрдВрдЧрд╛ рдЬреЛ AOP рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдУрдкреА рдХреА рд╢рд░реНрддреЛрдВ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░
рдПрдУрдкреА рдкрд░ рд▓реЗрдЦ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ, рд▓рд┐рдерд┐рдпрдо рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рдХрд╣реАрдВ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИрдВрдбрд▓рд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреИрд╢рд┐рдВрдЧ, рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛрдб рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдпрд╣ рдПрдХ рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА рд╣реИред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд▓рдЧ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рджрдпрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдлрд┐рд▓реНрдЯрд░ рдХреНрд▓реЛрдЬрд░ (рдПрдУрдкреА - рдЯрд┐рдкреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рд╣рд░ рдЬрдЧрд╣ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдЙрдирдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рддреАрд╕рд░рд╛, рдХреЛрдб рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпреЗ рддреАрди рдиреБрдХрд╕рд╛рди рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЪреМрдЦрдЯреЛрдВ рдореЗрдВ AOP рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдХрд╛рдлреА рд╕реАрдорд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВред
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓рд╛ - рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд┐рд╕реА рднреА рдкреАрдПрдЪрдкреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдУрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред рдлрд┐рд░ PHP рдХреЗ рд╕рд╛рде рд▓рдбрд╝рд╛рдИ рдереА, рдХреЛрдб рддреНрд╡рд░рдг рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди, рдУрдкрдХреЛрдб рддреНрд╡рд░рдХ рдХреЗ рдХреАрдбрд╝реЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИ, рдФрд░ рдХрдИ, рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВред рдирддреАрдЬрддрди, рдЧреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ! рдПрдУрдкреА рдкреАрдПрдЪрдкреА, рдЬрд┐рд╕реЗ рдПрдХ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЛрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдХрдИ рд╣рдЬрд╝рд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрдИ рд╣рдЬрд╝рд╛рд░реЛрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд╛рдУ! AOP PHP
рд╕рднреА рдореМрдЬреВрджрд╛ рдПрдирд╛рд▓реЙрдЧреНрд╕ рд╕реЗ рдореБрдЦреНрдп рдЕрдВрддрд░ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рднреА PHP рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдпрд╣ рдХрд╛рд▓рд╛ рдЬрд╛рджреВ рд░рдирдХрд┐рдЯ-рдП рдФрд░ php-aop рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдпрд╣ eval рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ DI рдХрдВрдЯреЗрдирд░ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдВрддрд┐рдо рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд╣рд▓реВ рд╕рдВрдХрд▓рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реВ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ рд╣реИрдВ, рдЬреЛ рдСрдУрдкреА рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрдВрдЯрд░рд╡реЙрд╡рди рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ, рдЗрд╕реЗ рдПрдХреНрд╕рдбреЗрдмрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╣рд▓реБрдУрдВред
рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓реБрдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ intertwined рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдХреЛрдб рдХреА рджрд╕ рд╕реЗ рдмреАрд╕ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдорд╛рдирдХ ZF2 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рд╕рдВрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдкрджреНрдзрддрд┐ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдУрдкреЛрдб рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд▓рдбрд╝рд╛рдХреВ рдореЛрдб рдореЗрдВ, рдкрд╣рд▓реБрдУрдВ рдХреА рдмреБрдирд╛рдИ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЛ рдУрдкреЛрдб рдХреИрд╢ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рджреНрдзрд╛рдВрдд рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдВрджрд░ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВред
AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕-рдереНрд░реВ рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ
рдПрдУрдкреА рдореЗрдВ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╖рдп рдЪреБрдирдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ - рдкрд╣рд▓реБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧред рдлрд┐рд░ рджреЛ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдВрдЧреЗ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреНрд▓реАрдирд░ рдФрд░ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдХреЛрдб рд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ
рддреЛ, рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 20 рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рд▓реЙрдЧрд┐рдВрдЧ рд╣реИ рдЬреЛ рдПрдХреНрдореЗ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
namespace Acme; class Controller { public function updateData($arg1, $arg2) { $this->logger->info("Executing method " . __METHOD__, func_get_args());
рдЖрдЗрдП рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рд▓реЗрдВ рдФрд░ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░реЗрдВ! рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐
рдХреЗ рдХреЛрдб рд╕реЗ
рдкрд╣рд▓реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреБрд░рдВрдд рд╕рд▓рд╛рд╣ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЪреБрдиреЗрдВ - рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗред рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХреНрдореЗ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдЕрдВрджрд░ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдпрд╣ рдирд┐рдпрдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдХреНрдореЗ \ * -> * ()) рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреЛ, рд╣рдо LoggingAspect рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
use Go\Aop\Aspect; use Go\Aop\Intercept\MethodInvocation; use Go\Lang\Annotation\Before; class LoggingAspect implements Aspect { protected $logger = null; public function __construct($logger) { $this->logger = $logger; } public function beforeMethodExecution(MethodInvocation $invocation) { $obj = $invocation->getThis(); $class = is_object($obj) ? get_class($obj) : $obj; $type = $invocation->getMethod()->isStatic() ? '::' : '->'; $name = $invocation->getMethod()->getName(); $method = $class . $type . $name; $this->logger->info("Executing method " . $method, $invocation->getArguments()); } }
рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рдРрд╕рд╛ рдкрд╣рд▓реВ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдореЗрдереЛрдб рдПрдХреНрд╕рдХреНрдпреВрд╢рди рд╕рд▓рд╛рд╣ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛, рдЬрд╛рдУ! рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреГрд╢реНрдп рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЕрдм рд╣рдо Go Core рдореЗрдВ рдЕрдкрдирд╛ рдкрд╣рд▓реВ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдФрд░ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдвреЗрд░ рд╕реЗ рд╕рднреА рд▓реЙрдЧрд┐рдВрдЧ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЛ! рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдкрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрдкрдирд╛ рдХреНрд▓рд╛рд╕ рдХреЛрдб рдХреНрд▓реАрдирд░ рдмрдирд╛рдпрд╛, рдпрд╣ рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдзрд┐рдХ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рд╕реЗ рдирд┐рдХрд╛рд▓ рд▓рд┐рдпрд╛ рдерд╛, рдЬреЛ рдЗрд╕рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм рд╣рдо рд▓реЙрдЧрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдпрд╣ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕реЗрдЯ рд╣реИред
рдкрд╛рд░рджрд░реНрд╢реА рдХреИрд╢рд┐рдВрдЧ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╡рд┐рдзрд┐ рдХреЛрдб рдЬрд╛рдирддрд╛ рд╣реИ:
public function cachedMethod() { $key = __METHOD__; $result = $this->cache->get($key, $success); if (!$success) { $result =
рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдкрд╣рдЪрд╛рди рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрд╢рд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рддреЛ рдРрд╕реЗ рдХрдИ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рд╕реНрд╡рдпрдВ рдХреИрд╢ рд╣реИрдВред рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ! рдЖрдЗрдП рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рддрддреНрдХрд╛рд▓ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рддрддреНрдХрд╛рд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рд╡рд┐рдзрд┐ рдХреЛрдб рдХреЛ "рд▓рдкреЗрдЯрддрд╛ рд╣реИ" рдХреИрд╢рд┐рдВрдЧ, рд╣рдореЗрдВ рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд▓рд╛рд╣ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд▓рдЧрднрдЧ, рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реАред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд▓рд╛рд╣ рд╡рд┐рдзрд┐ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреА рд╣реИред рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:
use Go\Aop\Aspect; use Go\Aop\Intercept\MethodInvocation; use Go\Lang\Annotation\Around; class CachingAspect implements Aspect { public function aroundCacheable(MethodInvocation $invocation) { static $memoryCache = array(); $obj = $invocation->getThis(); $class = is_object($obj) ? get_class($obj) : $obj; $key = $class . ':' . $invocation->getMethod()->name; if (!isset($memoryCache[$key])) { $memoryCache[$key] = $invocation->proceed(); } return $memoryCache[$key]; } }
рдЗрд╕ рдЯрд┐рдк рдореЗрдВ, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ MethodInvocation рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреЙрд▓ рдЖрдЧреЗ () рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреИрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рд╣реИ, рддреЛ рд╣рдо рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЖрдкрдХрд╛ рдХреЛрдб рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ!
рдЗрд╕ рдкрд╣рд▓реВ рдХреЗ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдПрдиреЛрдЯреЗрд╢рди \ Cacheable рдХрд╛ рдПрдиреЛрдЯреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ AOP рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╢ рдХреА рдЬрд╛рдПрдЧреАред рд╣рдо рд╕рднреА рддрд░реАрдХреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреИрд╢рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рдЕрдм рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╡рд┐рдзрд┐ рдХреЛрдб рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рджрд┐рдЦрддрд╛ рд╣реИ:
public function cachedMethod() { $result =
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЧреЛ! рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбреЗрдореЛ рдлреЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рднреА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрдУрдкреА рдкреАрдПрдЪрдкреА, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрд╕
рдкреНрд░рддрд┐рдмрджреНрдз рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдкрд╣рд▓реВ рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ PHP рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рдирдпрд╛ рдкреНрд░рддрд┐рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рдорд╣рд╛рди рднрд╡рд┐рд╖реНрдп рд╣реИред рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╡рд┐рдХрд╛рд╕, PHP рдореЗрдВ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд▓реЗрдЦрди - рдпрд╣ рд╕рдм рдЬрд╛рд╡рд╛ рдХреЗ рдорджреНрджреЗрдирдЬрд░ рд╣реИ, рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдУрдкреА рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд░рд╣ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрднреА рдПрдУрдкреА рдХреА рддреИрдпрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬрд╛рдУ! рдПрдУрдкреА рдкреАрдПрдЪрдкреА рдЙрди рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдПрдУрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ - рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ, рдЕрдВрддрд┐рдо рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ, рдкрд╣реБрдВрдЪ рдЧреБрдгреЛрдВ рдФрд░ рдбрд┐рдмрдЧ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдкрд╣рд▓реВ рдХреЛрдб рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдЬрд╛рдУ! рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХрд▓рди, рдзреАрдореА рддрдХрдиреАрдХреЛрдВ рдХреА рдХрдореА, рдЕрдиреБрдХреВрд▓рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдХреЛрдб, рдПрдХ opcode рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ - рдпрд╣ рд╕рдм рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдг рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИред рдЕрджреНрднреБрдд рдЦреЛрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдерд╛ рдХрд┐ рдЬрд╛рдУ! рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рд╕реА-рдПрдХреНрд╕рдЯреЗрдВрд╢рди PHP-AOP рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рд╕рдЪ рд╣реИ, рдЬрд┐рд╕рдХреА рдПрдХ рд╕рд░рд▓ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИ - рд╡рд┐рд╕реНрддрд╛рд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ PHP рдореЗрдВ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рдо рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд┐рдВрджреБ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдзрд┐рдХ рдЪреЗрдХ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рдХреЙрд▓ рдХреЛ рдзреАрдорд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЬрд╛рдУ! рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреА рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХ рдмрд╛рд░ рдХреНрд▓рд╛рд╕ рдХреЛрдб рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдФрд░ рд╕реБрдЭрд╛рд╡ рд╣реИрдВ, рддреЛ рдореИрдВ рдЦрд╝реБрд╢реА рд╕реЗ рдЙрдирдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░реВрдБрдЧрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ Habr├й рдкрд░ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред
рд╕рдВрджрд░реНрдн
- рд╕реНрд░реЛрдд рдХреЛрдб https://github.com/lisachenko/go-aop-php
- SymfonyCampUA-2012 рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ http://www.slideshare.net/lisachenko/php-go-aop
- SymfonyCampUA-2012 рд╡реАрдбрд┐рдпреЛ http://www.youtube.com/watch?v=ZXbREKT5GWE
- ZF2 рдореЗрдВ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд╡рд░реЛрдзрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ) https://github.com/lisachenko/zf2-aspect
- рд╡рд┐рд╖рдп рдкрд░ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ: рдкрд╣рд▓реВ, рдлрд┐рд▓реНрдЯрд░ рдФрд░ рд╕рдВрдХреЗрдд - рд╣реЗ рднрдЧрд╡рд╛рди! (рдПрди)