PHP рдореЗрдВ рд▓рдХреНрд╖рдг рдФрд░ рдмреЗрдирд╛рдореА рдлрд╝рдВрдХреНрд╢рдВрд╕ред рдиреАрдо рд╣рдХреАрдо!

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

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


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

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

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

рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ (5.3) PHP рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдФрд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛: "рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ! рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред тАЭ рддрдм (5.4) рд▓рдХреНрд╖рдг PHP рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдФрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╕рдордп рдЖ рдЧрдпрд╛ рдерд╛ред рдЪрд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ PHP рдХреЛ рдХреНрдпрд╛ рдкреЗрд╢рдХрд╢ рдХрд░рдиреА рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рддреЛ, рдЪрд▓реЛ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд▓рдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХрд┐рд╕ рдкрд░ рдЯреНрд░реЗрди рдХрд░реЗрдВ? рдЦреИрд░, рд╕рдВрдЧреНрд░рд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдВрдЧреЗред рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВред

рддреЛ, рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдареАрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рддрддреНрд╡, рдпрд╛ рдРрд╕реЗ рддрддреНрд╡ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ; рд╣рдо рдореВрд▓ рд╕рдВрдЧреНрд░рд╣ рдЖрджрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдХреБрдЫ рдСрдкрд░реЗрд╢рди (рдорд╛рдирдЪрд┐рддреНрд░) рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕реАрдзреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рдо рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗрдВ? рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ: рд╣рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓реЛ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рдЕрдиреБрдмрдВрдз рдХрд╣рддреЗ рд╣реИрдВ ред

рд╣рдо рдЗрд╕ рдЕрдиреБрдмрдВрдз рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
  1. рдорд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрдм рд╣рдо рдЦреБрдж рдкрд░ рдЪрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╛рдиреА рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  2. рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЦреБрдж рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдо рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ рдЗрд╕реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ , рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХ рдХрд╛ рд╕рдВрдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдЪреНрдЫреЗ рд╣реИрдВ (рд╢рд╛рдпрдж рдкрд╣рд▓рд╛ рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореИрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрдЦреНрдпрд╛ 2 рдХреЛ рдЪреБрдиреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдореЗрд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдРрд╕рд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рднрдВрдбрд╛рд░ рд╕реЗ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рдПрдЧреАред
рддреЛ, рдЪрд▓рд┐рдП, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд, рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦреЗрдВред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ: рд╕рдВрдЧреНрд░рд╣ \ Enumerable
namespace Collections; trait Enumerable { /**     ,  $block     **/ abstract public function each(\Closure $block); public function findAll(\Closure $predicate) { $result = new FancyArray(); $this->each(function($el) use ($predicate, &$result) { if ($predicate($el)) { $result[] = $el; } }); return $result; } public function map(\Closure $block) { $result = new FancyArray(); $this->each(function($el) use ($block, &$result) { $processed = $block($el); $result[] = $processed; }); return $result; } /**     **/ } 


рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ: рд╕рдВрдЧреНрд░рд╣ / FancyArray
 namespace Collections; class FancyArray implements \ArrayAccess, \Countable { protected $container; function __construct($initial = array()) { if (is_array($initial)) { $this->container = $initial; } else if ($initial instanceof FancyArray) { $this->container = $initial->toArray(); } } public function offsetExists($offset) { return isset($this->container[$offset]); } public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$offset] : null; } public function offsetSet($offset, $value) { if (is_null($offset)) { $this->container[] = $value; } else { $this->container[$offset] = $value; } } public function offsetUnset($offset) { unset($this->container[$offset]); } public function toArray() { return $this->container; } public function count() { return count($this->container); } } 


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрдЧреНрд░рд╣ \ Enumerable рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдФрд░ рдЕрдиреБрдмрдВрдз рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
 namespace Collections; class FancyArray implements \ArrayAccess, \Countable { use Enumerable; ... ... ... ... /** * Calls $block for every element of a collection * @param callable $block */ public function each(\Closure $block) { foreach ($this->container as $el) { $block($el); } } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдорд╛рдореВрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реА рдЪреАрдЬреЗрдВ (рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ):
 $a = new FancyArray([1, 2, 3, 4]); $res = $a->map(function($el) { return $el*$el; }); // [1, 4, 9, 16] $res->reduce(0, function($initial, $el) { return $initial + $el; })); // 30 

рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдордиреЛрд░рдВрдЬрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдХреНрдпрд╛, рдПрдХ рдлрд╝рд╛рдЗрд▓, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ? рд╕рдВрдЧреНрд░рд╣ рдмреЗрд╢рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
 namespace IO; class FancyFile extends \SplFileObject { use \Collections\Enumerable; public function each(\Closure $block) { $this->fseek(0); while ($this->valid()) { $line = $this->fgets(); $block($line); } } } 

рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛, рдЕрдиреБрдмрдВрдз рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╖рдо-рд▓рдВрдмрд╛рдИ рдХреА рдлрд╝рд╛рдЗрд▓ рдХреА рдХреБрд▓ рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдореЗрдВ рдХрднреА рднреА ^ _ ^ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ):
 $obj = new FancyFile(<filename>); $res = $obj ->select(function($el) { return strlen(trim($el)) % 2 == 1; }) ->map(function($el) { return strlen(trim($el)); }) ->reduce(0, function($initial, $el) { return $initial + $el; }); 

рдпреЗ рдмрд╛рддреЗрдВ рд╣реИрдВ, рд╕рдЬреНрдЬрдиреЛрдВред

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


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

рд╕рдВрджрд░реНрдн


рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ - habrahabr.ru/post/130000
рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - en.wikipedia.org/wiki/Duck_typing
рд▓реЗрдЦ рд╕реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ - github.com/ArtemPyanykh/php_fancy_collections

рдкреБрдирд╢реНрдЪ


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ, рддреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдХрд▓реЗрдХреНрд╢рдВрд╕ \ Enumerable рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
 $a->eachWithIndex(function($el, $idx) { echo $el; echo $idx; }); 

рдпрд╛ рд╕рдВрдЧреНрд░рд╣ \ Enumerable # рдЦреЛрдЬ рд╡рд┐рдзрд┐ рдореЗрдВ рдЧреИрд░-рд╕реНрдерд╛рдиреАрдп рд╕рдВрдХреНрд░рдордг рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (рдЬреИрд╕реЗ рд╣реА рд╣рдореЗрдВ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдпрджрд┐ рдЖрдк рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ рдпрд╛ рд╕рд┐рд░реНрдл рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред

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


All Articles