PHP рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ "рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕"ред рддрд╛рдЬрд╛ рджреЗрдЦреЛ


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


рд╡рд┐рдХрд╛рд╕ред рд╕рд░рд▓ рд╕реЗ рдЬрдЯрд┐рд▓ рддрдХред

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

рдЖрдЗрдП рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ

рддрд╛рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреВрд░ рди рдЬрд╛рдирд╛ рдкрдбрд╝реЗ, рдЖрдЗрдП рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдХрд╛рдИ рд▓реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рдирд╛рдо, рдЕрдВрддрд┐рдо рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдЧреБрдг рд╣реЛрдВ:

class User { public $name; public $surname; public $password; } 


рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд░реНрдЧ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 $user = new User; $user->name = 'John'; $user->surname = 'Doe'; $user->password = 'root'; 


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

рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдирд╣реАрдВ рдХрд╣рд╛:

 class User { protected $name; protected $surname; protected $password; public function setName($name) { $this->name = $name; } public function setSurname($surname) { $this->surname = $surname; } public function setPassword($password) { if (!$password) { throw new InvalidArgumentException("Password shouldn't be empty"); } $this->password = $password; } } 


рдирдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

 $user = new User; $user->setName('John'); $user->setSurname('Doe'); $user->setPassword('root'); 


рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ 20 рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? 30 рдЧреБрдг? рдЗрд╕ рдХреЛрдб рдХреЛ рд╕реЗрдЯрд░ рдХреЙрд▓ рдФрд░ $user-> рдХреА рдирд┐рд░рдВрддрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдмрдордмрд╛рд░реА рдХрд┐рдпрд╛ $superImportantUser $user-> рдпрджрд┐ рдЪрд░ рдирд╛рдо $superImportantUser , рддреЛ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рднреА рдЦрд░рд╛рдм рд╣реЛ рдЬрд╛рдПрдЧреАред рдЗрд╕ рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рджреНрд░рд╡рд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕

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

рд╕рд░рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рднреА рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 class User { protected $name; protected $surname; protected $password; public function setName($name) { $this->name = $name; return $this; } public function setSurname($surname) { $this->surname = $surname; return $this; } public function setPassword($password) { if (!$password) { throw new InvalidArgumentException("Password shouldn't be empty"); } $this->password = $password; return $this; } } 


рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рдЪрд░ рдХреА рдмрд╣реБрд╡рдЪрди рдирд╛рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

 $user = new User; $user->setName('John')->setSurname('Doe')->setPassword('root'); 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рдерд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдм рдХрдо рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рд╣рдордиреЗ рдЕрдкрдирд╛ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ! рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП: тАЬрддреЛ рдХреНрдпрд╛? рдореБрдЭреЗ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ ... "рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:" рдЗрд╕ рд░реВрдк рдореЗрдВ рдЦрд░рд╛рдм рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреНрдпрд╛ рд╣реИ? "рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

рддреЛ рд╡рд╣ рдмреБрд░рд╛ рдХреНрдпреЛрдВ рд╣реИ?

рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдорд┐рд▓рд╛ рдФрд░ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛? ) рддреЛ рдареАрдХ рд╣реИ, рдЖрдЧреЗ рдмрдврд╝реЛ! рдореИрдВ рдЖрдкрдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддрд╛ рд╣реВрдВ: рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде OOP рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрддрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрдЪреНрдЫрд┐рдд рд╡рд╕реНрддреБ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдиреАрд░рд╕ рд░реВрдк рд╕реЗ рдЗрд╕реЗ return $this рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджрд░реНрдЬрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде рджрд░реНрдЬрдиреЛрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рддрд░рд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдЕрдкреНрд░рд┐рдп рдСрдкрд░реЗрд╢рди рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреНрд▓рд╛рд╕рд┐рдХ рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред

рдЪрд▓реЛ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдмрдирд╛рддреЗ рд╣реИрдВ

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо "рджреНрд░рд╡" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рд░реНрдХрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:

 /** * Fluent interface marker */ interface FluentInterface { } 


рдФрд░ рдлрд┐рд░ рдкрд╣рд▓реВ рдХреЗ рдЕрдВрджрд░ рд╕рд▓рд╛рд╣ рдХреЗ рд░реВрдк рдореЗрдВ "рджреНрд░рд╡" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдмрд╣реБрдд рддрд░реНрдХ:

 use Go\Aop\Aspect; use Go\Aop\Intercept\MethodInvocation; use Go\Lang\Annotation\Around; class FluentInterfaceAspect implements Aspect { /** * Fluent interface advice * * @Around("within(FluentInterface+) && execution(public **->set*(*))") * * @param MethodInvocation $invocation * @return mixed|null|object */ protected function aroundMethodExecution(MethodInvocation $invocation) { $result = $invocation->proceed(); return $result!==null ? $result : $invocation->getThis(); } } 


рдореИрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХрд░реВрдБрдЧрд╛ - рд▓рдЧрднрдЧ рдЯрд┐рдк рдореВрд▓ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд╣реБрдХ "рдЪрд╛рд░реЛрдВ рдУрд░" рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ ред рдпрд╣ рдЙрд╕ рддрд░рдл рд╕реЗ рд▓рдЧреЗрдЧрд╛ рдЬреИрд╕реЗ рд╣рдордиреЗ рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреА рд╕рд▓рд╛рд╣ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдХрд░ рд╡рд╣рд╛рдВ рдЕрдкрдиреА рд╕рд▓рд╛рд╣ рджреАред рдХрд╛рдЙрдВрд╕рд┐рд▓ рдХреЛрдб рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдореВрд▓ рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЧрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо $invocation->getThis() рдСрдмреНрдЬреЗрдХреНрдЯ рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдЙрдкрдпреЛрдЧреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП "рджреНрд░рд╡" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрдЦрдж рдХрд╛рдо рд╣реИ:

 class User implements FluentInterface { //... public function setName($name) { $this->name = $name; } } 


рдЕрдм рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдореЗрдВ рдЕрдм рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд╕ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рдирд╛ рд╣реИ - implements FluentInterface ред рдХреЛрдИ рднреА рдирдХрд▓ рдирд╣реАрдВ return $this , рд╕реИрдХрдбрд╝реЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ, рдХреЗрд╡рд▓ рд╕реНрд╡рдЪреНрдЫ рд╕реНрд░реЛрдд рдХреЛрдб, рдПрдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рд░реНрдХрд░, рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╣рд▓реВ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ "рджреНрд░рд╡" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдПрдУрдкреА рд╕рднреА рдХрд╛рдо рдкрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рд▓реЗрдЦ рдХреЗрд╡рд▓ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдЪрд┐рдВрддрди рдХрд░рдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ PHP рдореЗрдВ AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рдереЗред

рд╕рдВрджрд░реНрдн:
  1. рдЬрд╛рдУ! PHP рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдлреНрд░реЗрдорд╡рд░реНрдХ
  2. рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ - рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
  3. рдЧрд┐рдердм рдкрд░рд┐рдпреЛрдЬрдирд╛

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


All Articles