тАЬрд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрдиред рдмрд╕ рд╕рд░рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рдпрд╛ рдореИрдВ fun'a рдХреЗ рд▓рд┐рдП рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░" PHP рдЬреВрдирд┐рдпрд░ "рдкрд░ рдХреНрдпреЛрдВ рдЬрд╛рддрд╛ рд╣реВрдВ

рдЧреНрд░реАрдЯрд┐рдВрдЧ


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

рдкрд╛рдардХ рдХреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ "рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдЕрд╕рдВрдЧрддрд┐" рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд╛рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдХрдВрдкрдиреА рдореЗрдВ "рдХрд╛рд▓реНрдкрдирд┐рдХ" рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореБрдЭреЗ "рд░рдгрдиреАрддрд┐" рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣, рдореЗрд░реЗ рдЬрд╡рд╛рдм рдореЗрдВ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░рдХрд░реНрддрд╛ рдХреА рдирдЬрд╝рд░ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рд╕рдВрджреЗрд╣рдЬрдирдХ рд╣реЛрдЧрд╛ред

рдЭрд╛рдВрдХрдирд╛ рдордд

рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЬреНрдЮрд╛рди рдХреЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рднрдгреНрдбрд╛рд░ рдореЗрдВ C ++ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рд▓реЗрдЦ "рд╕реНрдЯреНрд░реЗрдЯреЗрдЬреА рдбрд┐рдЬрд╝рд╛рдЗрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ" рд╣реИ, рдЬреЛ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ GoF рдкреБрд╕реНрддрдХ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдЬреНрдЮрд╛рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ (рдФрд░ рдЕрдЪрд╛рдирдХ рдЧреВрдврд╝ рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд), рдореЗрд░рд╛ рдХрд╛рдо рдерд╛: рдЭрд╛рдБрдХ рдирд╣реАрдВ, рдПрдХ рд▓реЗрдЦ рд╕реЗ рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рдкреИрдЯрд░реНрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ рд░рдЯрдирд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреНрдпрд╛ рд╣реБрдЖред

рджреЗрдЦрд╛, рд╢реВрд░рд╛, рджреЗрдЦрд╛

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

interface IValidator { /** * @param Mixed|stdClass $validatorParam * @return Boolean */ function isValid($validatorParam); } 

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

 function Validate(IValidator $validateStrategy, $param) { return $validateStrategy->isValid($param); } 

рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛ рдХрд╛ рдЕрдиреБрдХреВрд▓рди , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 function ValidateName($userName) { return Validate(new NameValidator(), $userName); // obsolete $param, fixed by domage@habrahabr } 

"рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ," рдореИрдВ рдЖрдкрдХреЗ рдЕрджреГрд╢реНрдп рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдЖрдкрдХреЛ рджреВрдВрдЧрд╛:
рд╣рд░ рдмрд╛рд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдпрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рд╡реИрд░рд┐рдПрдмрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рд▓реЗрдХрд┐рди рдпреЗ рдЕрдЧрд▓реЗ рд░рд┐рдлрд▓реЗрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдкрд░ рд▓реМрдЯреЗрдВ: рд╣рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдореЗрд▓рдмреЙрдХреНрд╕ (рдИрдореЗрд▓), рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм: рдХреНрдпрд╛ рдпрд╣ рд╣реЛрд╣реЛ рдкрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдкрддрд╛ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдпрд╛ рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реИ?

 class HohoEmailValidator implements IValidator { public function isValid(/*String*/ $email) { return $email === 'Hoho'; // best comparison of ever } } class LengthEmailValidator implements IValidator { public function isValid(/*String*/ $email) { return strlen($email) > 5; } } class LengthMaxEmailValidator implements IValidator { public function isValid(/*String*/ $email) { return strlen($email) <= 100500; } } 

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдиреНрдп () рдлрд╝рдВрдХреНрд╢рди рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ (рд╕реВрдЪреА, рд╕рд░рдгреА) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ (рд╕реВрдЪреА, рд╕рд░рдгреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 function IsValidByStrategy(/*Collection of IValidators*/ $strategyCollection, /*Any type*/ $param) { foreach($strategyCollection as $strategy) { if($strategy instanceof IValidator) { //       -_- if(!$strategy->isValid($param)) return false; } } return true; } 

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

 //  true,  function IsValidEmailStrong($email = 'habr@habr.ru') { return IsValidByStrategy(array( new HohoEmailValidator(), //  ""  new LengthEmailValidator() //    5  ), $email); } 

рд╕рддреНрдпрд╛рдкрди рддрд░реНрдХ рд╕реНрдорд╛рд░реНрдЯ рдирд┐рдХрд▓рд╛ (<- рдпрд╣ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ):
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛

рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрдо рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ( рд▓реЗрдВрдбрдЗрдореЗрд▓рд╡реИрд▓рд┐рдбреЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦреЗрдВ), рд╣рдо рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реНрдЯреНрд░реЗрдЧреА рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реНрд▓реЗрд╡рд┐рдбреИрд▓рд╕реНрдЯреНрд░реАрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
 interface IsValidReturnRule { /** * @param Boolean $validateResult * @param Boolean $validateResultByStep * @return Boolean */ function validateStep(&$validateResult, $validateResultByStep); /** * @return Boolean */ function initialize(); } class ValidReturnRuleAny implements IsValidReturnRule { public function validateStep(&$validateResult, $validateResultByStep) { $validateResult |= $validateResultByStep; return $validateResult; } public function initialize() { return false; } } function IsValidByStrategyByRetRule(/*Collection of IValidators*/ $strategyCollection, /*Any type*/ $param, IsValidReturnRule $retStrategy) { $result = $retStrategy->initialize(); foreach($strategyCollection as $strategy) { if($strategy instanceof IValidator) { if($retStrategy->validateStep($result, $strategy->isValid($param))) return $result; } } return $result; } 

рд╣рдореЗрдВ рдХреБрд▓ рдорд┐рд▓рд╛:рдЕрдм, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕реА рднреА рдореЗрд▓рд┐рдВрдЧ рдкрддреЗ рдХреЛ рд╡реИрдз рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 class ValidReturnRuleAny implements IsValidReturnRule { public function validateStep(&$validateResult, $validateResultByStep) { $validateResult |= $validateResultByStep; return $validateResult; } public function initialize() { return false; } } function IsValidEmailSoft($email = 'habr@habr.ru') { return IsValidByStrategyByRetRule(array( new HohoEmailValidator(), new LengthEmailValidator() ), $email, new ValidReturnRuleAny()); } 

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

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

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

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╕рд░рд▓ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк "рдЗрддрдирд╛ рдкрд╛рдиреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред" рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдмрд╛рдд рдкрд░ рдпрдХреАрди рд╣реИ: рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рдж, рд╣рдордореЗрдВ рд╕реЗ рд╡реЗ, рдЬреЛ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ, рдЙрдкреЗрдХреНрд╖рд┐рдд рдпрд╛ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдбрд░рддреЗ рдереЗ, рд╣рдорд╛рд░реЗ рдбрд░ рдкрд░ рд╡рд┐рдЬрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЦрд┐рд░рдХрд╛рд░: рдЬреНрдЮрд╛рди рдЕрдЬреНрдЮрд╛рди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдкреНрд░рдХрд╛рд╢ рдЕрдВрдзреЗрд░реЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд╣реИ!

рдпреБрдкреАрдбреА:
рдкреАрдПрд╕ рд╣рд╛рдВ, рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИ, рдЗрд╕рд▓рд┐рдП: рдкреАрдПрдо рдХреЛ рдмрдзрд╛рдИ, рдЖрд▓реЛрдЪрдирд╛, рдЕрдкрдорд╛рди, рдЧрд▓рддреА / рдЧрд▓рддреА рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИред

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


All Articles