рдореБрдЭреЗ рдЖрдкрдХреЛ
рдЬреЛрд╣рд╛рдиреНрд╕ рд╢реНрдорд┐рдЯ рдСрдЯреЛрдореЗрдЯреЗрдб рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рдПрдВ PHP рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╡рд╛рдж рд╕реЗ
рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рддреА рд╣реВрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЙрд╕рдиреЗ рдореБрдЭреЗ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХ рдХрд╛ рдореВрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдХрдо рд╕реЗ рдХрдо, рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдпрджрд┐ рдЖрдк рднреА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдЯреНрд░реЗрд╡рд┐рд╕ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рддреБрд░рдВрдд рдЕрдкрдиреЗ рд╕рднреА PHP рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рди рдХреЗрд╡рд▓ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдзреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдЯреНрд░реИрд╡рд┐рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддрд░рд╣, рдпрд╣ рдПрдХ рд╡рдВрд╢рд╛рдиреБрдЧрдд рдмреАрдорд╛рд░реА рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИ - рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╢рд░реНрдд рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдЗрдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ 100% рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдХрд╡рд░ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЕрдм рднреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВрдЧреЗред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореИрдВ Symfony2 рдФрд░ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди PHP рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрдВрдбрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж (рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВ, рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦреЗрдВ) рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдкрдбреЗрдЯ рдЕрдиреБрд░реЛрдз рдорд┐рд▓рддреЗ рд╣реИрдВред рдХреБрдЫ рдкреНрд░рд╢реНрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВ, рдХреБрдЫ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдХреБрдЫ рдХреЛ рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рдХрд┐рддрдиреА рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдордп-рд╕рдордп рдкрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред
рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛: рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдВ рдЬреЛ рдЕрдкрдбреЗрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рд╛рдзрд╛рд░рдг рдЪреЗрдХ рдЬреЛрдбрд╝реЗред рдлрд┐рд░, рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪреЗрдХ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
<?php class UserProvider { public function loadUser($username) { } public function refreshUser(User $user) { if (null === $user = $this->loadUser($user->getUsername())) { throw new RuntimeException( sprintf('User "%s" was not found.', $user->getUsername())); } return $user; } }
рдФрд░ рдЗрд╕рд▓рд┐рдП,
рд░рд┐рдлреНрд░реЗрд╢рд░ рд╡рд┐рдзрд┐
рд▓реЛрдбрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕ рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред рдФрд░ рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИ? рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдФрд░ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдЧрд▓рддреА рджреЗрдЦреА рд╣реИред рдЕрдЧрд░ рдЕрдВрджрд░ $ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд▓реЙрдХ рд╢реВрдиреНрдп рд╣реИ рдФрд░ рд╣рдо рдЙрд╕ рдкрд░
getUserName рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрдИ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЬрд▓реНрджреА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдХреБрдЫ рдмреЗрд╣рддрд░ рдЪрд╛рд╣рд┐рдП рдерд╛ред
PHP рдХреЛрдб рдХрд╛ рдкреНрд░рдХрд╛рд░
рдореИрдВрдиреЗ
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдФрд░
рдЕрдореВрд░реНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рджреЗрд░реА рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЬрдЯрд┐рд▓ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЛ рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реВрдВред
рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
<?php function fooBar($i) { if ($i > 0) { echo 'foo'; } else { echo 'bar'; } }
рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЕрдЧрд░, рддреЛ "рджреВрд░" рдпрд╛ "рдмрд╛рд░" рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪрд▓рддреЗ рд╕рдордп рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреИрд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред
<?php $x = null;
рдХреЛрдб рдХреЗ рдЖрджреЗрд╢ рдХреЛ рдЬрд╛рдиреЗ рдмрд┐рдирд╛, рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ $ x рд╢реВрдиреНрдп, рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдПрдХ рдбреЗрдЯрдЯрд╛рдЗрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛
рдкреНрд░рд╛рд░реВрдк рдкрджреНрдзрддрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рд░ рд╡реНрдпрд╛рдЦреНрдпрд╛
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рдЙрдмрд▓рддреА рд╣реИ "рдЕрдЧрд░ рд╣рдо рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдХреНрдпрд╛ рдзрд╛рд░рдгрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?" рдЖрдЗрдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
<?php class Foo { private $logger; public function __construct(Logger $logger = null) { $this->logger = $logger; } public function doSth() { if (null !== $this->logger) { $this->logger->log('doing sth'); } } }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, "рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рд╢реВрдиреНрдп рд╣реИ! == $ рдпрд╣-> рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ред рдпрджрд┐ рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╕рддреНрдп рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдкреНрд░рд╢реНрди рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╢реВрдиреНрдп рд╣реИ! == $ рдпрд╣-> рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╕рддреНрдп рд╣реИ, рддреЛ $ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдзрд╛рд░рдгрд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ-> рд▓рдХрдбрд╝рд╣рд╛рд░рд╛?" рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ, $ рдпрд╣-> рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдЕрд╢рдХреНрдд рдпрд╛ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдореВрд░реНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ $ $ рдЗрд╕ рдЕрдВрджрд░-> рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╣рдореЗрд╢рд╛ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА
рдЗрди рд╕рдмрдХрд╛ рдХреНрдпрд╛ рдлрд╛рдпрджрд╛, рдЖрдк рдкреВрдЫрд┐рдПред рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдирд╛ рдерд╛ред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдпрд╣ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдЕрдЧреНрд░рдгреА PHP рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдЬреИрд╕реЗ рдХрд┐ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ 2, Symfony2, Doctrine, Propel рдФрд░ рдХрдИ рдЕрдиреНрдпред рдЗрд╕рдореЗрдВ 100 рд╕реЗ рдЕрдзрд┐рдХ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Github рдкрд░ PHP рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕
http://jmsyst.com/automated-code-reviews рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдордп рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЕрдм рдХреЛрдИ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ PHP рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЧрдВрднреАрд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рднреЗрдЬреЗрдВред