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

LINQ рдХреНрдпреЛрдВ?
рдирдИ рддрдХрдиреАрдХ рд╣рдореЗрд╢рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддреА рд╣реИред рд╡реЗ рдХреНрдпреЛрдВ рдЙрддреНрдкрдиреНрди рд╣реБрдП, рд╡реЗ рдХрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ? рдРрд╕реА рд╣реА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ LINQ (рд▓реИрдВрдЧреНрд╡реЗрдЬ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯреЗрдб рдХреНрд╡реЗрд░реА), рдбреЗрдЯрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП SQL рдЬреИрд╕реА рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рд╣реИ (рд╕рд░рдгрд┐рдпрд╛рдБ, рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ, рд╕рдВрдЧреНрд░рд╣)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
var q = from c in db.Customers where c.Activity == 1 select new { c.CompanyName, c.ItemID, c.ItemName };
C # рдореЗрдВ, рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рднрд╛рд╖рд╛ рд╕реНрддрд░ рдкрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рд╣реИ, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ
var q = db.Customers. Where((c) => c.Activity == 1). Select((c) => { c.CompanyName, c.ItemID, c.ItemName });
рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдкрд░
Where
рдФрд░
Select
рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдПрдХрд▓ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд - рд╕рдм рдХреБрдЫ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдкреВрд░реНрд╡ рдЙрдиреНрдореВрд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЕрдиреНрдп рдкреНрд▓рд╕ рд╣реИрдВ:
- рдЪреВрдВрдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдХреНрд░рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╕реНрдерд╛рдиреАрдп рдЧрдгрдирд╛ рдХреЗ рдмрдЬрд╛рдп, LINQ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдирд┐рдпрдорд┐рдд SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓) рдзреНрд╡рд╕реНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рд╣реНрдп рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИред
- рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИред рдЗрд╕реЗ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
PHP рдореЗрдВ рдПрдХ рд╣реА рдЯреВрд▓ рдХрд╛ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ C # рдореЗрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб рдХреЗред рдФрд░ рдпрджреНрдпрдкрд┐ рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ LINQ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдИ рд╕реА # рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ PHP рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╣рд░ рдХрд┐рд╕реА рдХрд╛ рд╕реНрд╡рд╛рдж рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред
рдирдХрд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА?
рд╣рдо рдпрд╣ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ C # рдХреА рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ PHP рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред
- рдвреАрд▓рд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ ред рдмрд▓реНрдХрд┐ рдпрд╣ рдПрдХ рдлрд╛рдпрджрд╛ рд╣реИред
- рдХреЛрдИ рдЕрдзрд┐рднрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдБред рдпрд╣ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕, рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ
cmpString
, cmpArray
, cmpLaptop
рдирд╛рдо рдХреЗ рд╕рд╛рде рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдФрд░ рдпрджрд┐ рдПрдХ рдмрдбрд╝реЗ рдПрдХ рдХреЗ рдЕрдВрджрд░ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рди рдЦрд░рд╛рдм рд╣реИрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд╛рдо рдореЗрдВ "рдХреЛрдб рдКрдкрд░" рдЬрд╣рд╛рдВ рдХреЛрдб рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред - рдХреЛрдИ рдХреНрд▓рд╛рд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╣реАрдВред рдЖрдк рдПрдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк IEnumerable <T> рдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдирд╣реАрдВ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди PHP рдореЗрдВ рдПрдХ рдореИрдЬрд┐рдХ __call рдореЗрдердб рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рдХрд╣реАрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЖрдИрдбреАрдИ рдореЗрдВ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдирд╛ рднреА рд▓рд╛рдпрдХ рд╣реИред
- рдЕрдЪреНрдЫрд╛ рд░рд┐рдЯрд░реНрди рдЙрдкрдЬ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЬрдирд░реЗрдЯрд░ рдирд╣реАрдВ (php <5.5)ред рдПрдХ рдУрд░, рдпрд╣ рд╢реНрд▓реЗрд╖реНрдо рд╢рд░реНрдХрд░рд╛ рд╣реИред рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ
\Iterator
рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ next()
рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдХрдИ рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧреА рд╣рд┐рд╕реНрд╕рд╛ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред рдЬреЗрдирд░реЗрдЯрд░ 5.5 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред - рдХреЛрдИ рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдирд╣реАрдВред рдпреЗ рдРрд╕реЗ рдЫреЛрдЯреЗ рдЕрдирд╛рдо рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реАрдорд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ, рдПрд╕рдХреНрдпреВрдПрд▓ред рдЖрдк PHP рдореЗрдВ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
- рдХреЛрдИ рдСрдкрд░реЗрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк
$f = (Exp::x()+1) * 2
рдЬреИрд╕реЗ рдХреБрдЫ рд▓рд┐рдЦрдХрд░ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдФрд░ Exp::x()
рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝ рдФрд░ рдЧреБрдгрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдирд╛, Closure
рд╕реЗ рд╡рдВрд╢рдЬ ред
рдорд╛рдореВрд▓реА рдЕрдВрддрд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рддрдереНрдп рдХрд┐ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (
IEnumerator
Iterator
рдмрди рдЧрдпрд╛,
IEnumerable
IteratorAggregate
рдмрди рдЧрдпрд╛), рдпрд╛ рдХрд┐ PHP рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдХрд░реЗрдВ? рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ C # рдХреА рдЫрд╛рдк рдХреЗ рддрд╣рдд рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХреА, рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд╣реАрдВред рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдХреБрдЫ рд╢рд╛рдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ MSDN рд╕реЗ рд╕рднреА рдорд╛рдирдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛, рддрд░реНрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ .NET рд▓рд╛рдпрд╛ред рд╡рд░реНрд╖ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХреА, рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬреАрдердм рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореБрдЦреНрдп рдЬреЛрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
Iterators рд╕рдм рдХреБрдЫ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ iterators рд╣реИрдВ
рдЬрдЯрд┐рд▓ рд▓реВрдк рдХреЗ рдмрдЬрд╛рдп, рд╕рд░рдгреА рд╕реЗ рд╕рд░рдгреА рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред PHP 5.5 рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬреЛ
\Iterator
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд
\Iterator
рд▓рд┐рдП constructor
\Iterator
рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
$data = new \ArrayIterator([1,2,3]); $even = new \CallbackFilterIterator($data, function ($item) { return $item % 2 == 0; } );
рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╕рдордп, рдбреЗрдЯрд╛ рдХреЛ рдореВрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдЦреАрдВрдЪрдирд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдиреНрдпреВрдирддрдо рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдареЗрда рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП
15 рд╕реЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ
рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- CallbackFilterIterator - рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЖрдЗрдЯрдо
- CallbackIterator - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрдирдВрдд рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛
- рдбрд┐рд╕реНрдЯрд┐рдХреНрдЯрд┐рд▓реЗрдЯрд░ - рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡ рдЬрд╛рд░реА рдХрд░рдирд╛
- рд╕рд┐рд╡рд╛рдп рдЗрдХреНрд╡реЗрдЯреЛрд░реЗрдЯрд░, рдЗрдВрдЯреЗрд░рд╕реЗрдХреНрдЯреЗрд░реЗрдЯрд░ - рдШрдЯрд╛рд╡, рджреЛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди
- GroupingIterator - рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХрд░рдг
- IndexIterator - рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдЖрдЗрдЯрдо рдЫрд╛рдВрдЯрдирд╛
- JoinIterator, OuterJoinIterator - рд╕рдЦреНрдд, рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рджреЛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд╕рдЦреНрдд рдмрдВрдзрди рдирд╣реАрдВ
- рд╕реАрдорд╛рдВрддрдХ - рдХреНрд░рдо рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рдХрд░рдирд╛
- ProductIterator - рдХрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдХреНрд░реЙрд╕-рдЙрддреНрдкрд╛рдж
- рдкреНрд░реЛрдЬреЗрдХреНрд╢рдирдЗрдВрдЯрд░реЗрдЯрд░ - рддрддреНрд╡реЛрдВ рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг (рдХреБрдВрдЬреА)
- ReverseIterator - рдЙрд▓рдЯрд╛ рдХреНрд░рдо
- SkipIterator - рд╣рд╛рд▓рдд рд╕рдЪ рд╣реИ, рдЬрдмрдХрд┐ рд▓рдВрдШрди рддрддреНрд╡реЛрдВ
- TakeIterator - рддрддреНрд╡реЛрдВ рдХрд╛ рдореБрджреНрджрд╛ рдЬрдмрдХрд┐ рд╕реНрдерд┐рддрд┐ рд╕рдЪ рд╣реИ
- LazyIterator рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИред рдЬрдм рддрддреНрд╡ рдкрд╣рд▓реА рдмрд╛рд░ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- VariableIterator - рдЗрдЯреНрд░реЗрдЯрд░ рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдореВрд▓ рдЗрдЯрд░реЗрдЯрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ
Iterators рдХреЛ LINQ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рднреА рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрд▓рд╕реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдпрджрд┐ LINQ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдЪреНрдЪрддрдо рдирд┐рд╖реНрдкрд╛рджрди рдЧрддрд┐, рд╕реБрдВрджрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдФрд░ рдЖрдИрдбреАрдИ рдореЗрдВ рд░рд┐рдлреИрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд▓реЗрдЦрдХ "рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрдз PHP рдХреЛрдб рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред SQL рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдкреБрди: рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, SQL рдХрд╣рддреЗ рд╣реИрдВред рдХреБрдЫ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
$x ==> $x*$x
ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдИрдбреАрдИ рдореЗрдВ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдФрд░ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рд▓рдВрдмрд╛ рд╣реИ, рдХреЛрдб рдХреИрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдзрд╛рд░
ExpressionBuilder
рдХреНрд▓рд╛рд╕ рд╣реИ, рдЬреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдПрдХ рдЧрдгрдирд╛ рдкреЗрдбрд╝ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд░рд┐рд╡рд░реНрд╕ рдкреЛрд▓рд┐рд╢ (рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕) рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рд▓рд┐рдП
$exp = new ExpressionBuilder(); $exp->add(1); $exp->add('+',1); $exp->add(2); $exp->export();
рдкрд░рд┐рдЪрд╛рд▓рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдФрд░ рдХреЛрд╖реНрдардХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Expression
рдХреНрд▓рд╛рд╕ рдЕрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдРрд░реЗ рд╕реЗ рдЪрд▓рддреА рд╣реИ рдФрд░, рдпрджрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдЯрд╛рдЗрдк
OperationInterface
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреИрдХ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рд╡рд╛рдкрд╕ рдлреЗрдВрдХрддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдорд╛рди рд░рд╣рддрд╛ рд╣реИ - рдкрд░рд┐рдгрд╛рдоред рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░,
LambdaInstance
рдХреНрд▓рд╛рд╕ рдФрд░ рдЗрд╕рдХреЗ
Lambda
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╛рд╡ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
- рддрд░реНрдХ, рд╕реНрдерд┐рд░рд╛рдВрдХ рддрдХ рдкрд╣реБрдВрдЪ
$f = Lambda::v(); $f = function ($x) { return $x; };
- рдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди, рддреБрд▓рдирд╛ рд╕рдВрдЪрд╛рд▓рди, рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди
$f = Lambda::v()->add()->v()->mult(12)->gt(36); $f = function ($x) { return $x + $x*12 > 36; };
- рдХреЛрд╖реНрдардХ
$f = Lambda::v()->mult()->begin()->c(1)->add()->v()->end(); $f = function ($x) { return $x * (1 + $x); };
- рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди
$f = Lambda::v()->like('hallo%');
- рд╕рд░рдгреА рдкреАрдврд╝реА
$f = Lambda::complex([ 'a'=>1, 'b'=>Lambda::v() ]); $f = function ($x) { return [ 'a' => 1, 'b' => $x ]; };
- рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ, рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ
$f = Lambda::v()->items('car'); $f = Lambda::v()->getCar(); $f = Lambda::car; $f = function ($x) { return $x->getCar(); };
- рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдУ
$f = Lambda::substr(Lambda::v(), 3, 1)->eq('a'); $f = function ($x) { return substr($x,3,1) == 'a'; };
- рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП LINQ рд╡рд┐рдзрд┐рдпрд╛рдБ
$f = Lambda::v()->linq()->where(Lambda::v()->gt(1)); $f = function (\Iterator $x) { return new CallbackFilterIterator($x, function ($x) { return $x > 1; }); };
рдмреЗрд╢рдХ, рдореЗрдордиреЗ рдХреЗ рднрд╛рд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдЗрдб рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди
(x)=>x+1
, рдлрд╝рдВрдХреНрд╢рди рдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдХреЙрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ
Lambda
рдЧрдгрдирд╛ рдХреА рдЧрддрд┐ 15 рдЧреБрдирд╛ рдзреАрдореА рд╣реИ, рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЗрд╡рд▓ 3600 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдореЛрд░реА рдмрдирд╛рдо 800 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░реЙрдЗрд▓рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ рдХрд┐ рдЧрддрд┐ рдХреИрд╕реЗ рдмрдврд╝рд╛рдПрдВ рдФрд░ рдореЗрдореЛрд░реА рдХрдо рдХрд░реЗрдВред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдорд┐рд▓реЛ, рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рджреЗрдЦреЗрдВ
рд╕рднреА LINQ рд╡рд┐рдзрд┐рдпрд╛рдБ рдорд╛рдирдХ .NET 4.5 рд╕реЗ рд▓реА рдЧрдИ рд╣реИрдВ рдФрд░ MSDN рд╕реЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ (
GenerationInterface
рдЗрдиреНрдЯрд░рдлреЗрд╕,
FilteringInterface
рдЗрдиреНрдЯрд░рдлреЗрд╕, рдЖрджрд┐) рдкрд░ рдмрд┐рдЦрд░реА рд╣реБрдИ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╛рдЗрд▓реЗрдВ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдХреИрд╢рд┐рдВрдЧ рд╕рдХреНрд╖рдо рд╣реИред PHP рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рд╛ рд╣реИред
IEnumerable
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рднреА рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░
\IteratorAggregate
рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИред
Linq
рд╡рд░реНрдЧ рд╕реНрдерд╛рдиреАрдп рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП
IEnumerable
рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЖрдк
IEnumerable
рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛ рдпрд╛ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХрд╛ рдПрдХ рдореБрдЦреМрдЯрд╛ рд╣реЛрдЧрд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдХрддреНрд░реАрдХрд░рдг - рдХреБрд▓, рдФрд╕рдд, рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо, рдпреЛрдЧ, рдЧрд┐рдирддреА
- рд╕рдорд╛рд╕ - рд╕рдорд╛рд╕, рдЬрд┐рдк
- рдПрд▓рд┐рдореЗрдВрдЯ - рдПрд▓рд┐рдореЗрдВрдЯрдПрдЯ, рдПрд▓рд┐рдореЗрдВрдЯрдЕрдЯрдСрд░реНрдбрдлрд╝реЙрд▓реНрдЯ, рдлрд╝рд░реНрд╕реНрдЯ, рдлрд╝рд░реНрд╕реНрдЯрдСрд░реНрдлрд╝реЙрд▓реНрдЯ, рд▓рд╛рд╕реНрдЯ, рд▓рд╛рд╕реНрдЯрдСрд░реНрдлрд╝реЙрд▓реНрдЯ, рд╕рд┐рдВрдЧрд▓, рд╕рд┐рдВрдЧрд▓рдСрд░реНрдлрд╝реЙрд▓реНрдЯ
- рд╕рдорд╛рдирддрд╛ - рдЗрдХреНрд╡реЗрд▓
- рдЫрд╛рдирдирд╛ - ofType, рдЬрд╣рд╛рдБ
- рдЬрдирд░реЗрд╢рди - рд╕реЗ, рд░реЗрдВрдЬ, рд░рд┐рдкреАрдЯ
- рд╕рдореВрд╣реАрдХрд░рдг - groupBy
- рдЬреБрдбрд╝рдирд╛ - рдЙрддреНрдкрд╛рдж, рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛, joinOuter, groupJoin
- рд╡рд┐рднрд╛рдЬрди - рдЫреЛрдбрд╝реЗрдВ, рдЫреЛрдбрд╝реЗрдВ, рд▓реЗ рдЬрд╛рдПрдБ, рд▓реЗ рдЬрд╛рдПрдБ, рд▓реЗ рдЬрд╛рдПрдБ
- рдкреНрд░реЛрдЬреЗрдХреНрд╢рди - рдЪрдпрди рдХрд░реЗрдВ, рдЪрдпрди рдХрд░реЗрдВ, рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ
- рдХреНрд╡рд╛рдВрдЯрд┐рдлрд╛рдпрд░ - рд╕рднреА, рдХрд┐рд╕реА рднреА, рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ
- рд╕реЗрдЯ - рдЕрд▓рдЧ, рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди, рд╕рдВрдШ рдХреЛ рдЫреЛрдбрд╝рдХрд░
- рд╕реЙрд░реНрдЯрд┐рдВрдЧ - рдСрд░реНрдбрд░рдмрд╛рдп, рдСрд░реНрдбрд░рдмрд╛рдпрд╕реНрдХреЗрдВрдбрд┐рдВрдЧ, рдлрд┐рд░рдмрд╛рдп, рдлрд┐рд░рдмрд╛рдпрд╕реНрдХреЗрдВрдбрд┐рдВрдЧ, рд░рд┐рд╡рд░реНрд╕, рдСрд░реНрдбрд░
- рдЕрдиреНрдп - toArray, toList, рдкреНрд░рддреНрдпреЗрдХ
рдпрджрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддреЛ рдпрд╣ рдПрдХ рд╕рд░рдгреА (
array
), рдПрдХ рдлрд╝рдВрдХреНрд╢рди (
callable
), рдпрд╛ рдПрдХ рдЗрдЯрд░реЗрдЯрд░ (
\Iterator
,
\IteratorAggregate
) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди (
callable
), рдПрдХ рд╕рд░рдгреА (
array
), рдпрд╛ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (
\LambdaInterface
) рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ
рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рднреА рд╣реИрдВ ред
// Grouping+Sorting+Filtering+array expression $x = Linq::from($cars)->group(Lambda::v()->getCategory()->getId())->select([ 'category' => Lambda::i()->keys(), 'best' => Lambda::v()->linq() ->where(Lambda::v()->isActive()->eq(true)) ->orderBy(Lambda::v()->getPrice()) ->last() ]) // Set + LambdaInterface expression $x = Linq::from($cars)->distinct(Lambda::v()->getCategory()->getTitle()); // Set + string expression $x = Linq::from($cars)->distinct('category.title'); // Generation+callable $fibonacci = function () { $position = 0; $f2 = 0; $f1 = 1; return function () use (&$position, &$f2, &$f1) { $position++; if ($position == 1) { return $f2; } elseif ($position == 2) { return $f1; } else { $f = $f1 + $f2; $f2 = $f1; $f1 = $f; return $f; } } } $x = Linq::from($fibonacci)->take(10);
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ ...
рдкреНрд░рддреНрдпреЗрдХ LINQ рд╡рд┐рдзрд┐
Linq
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЕрдиреНрдп
Linq
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╢реБрд░реБрдЖрддреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╣реИрдВред рдЪреВрдВрдХрд┐
Linq
\IteratorAggregate
рд▓рд╛рдЧреВ рдХрд░рддрд╛
\IteratorAggregate
, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓рд╛ рддрддреНрд╡ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ?
рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдорд╕реНрддрд┐рд╖реНрдХ рдФрд░ рд╣рд╛рдереЛрдВ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд 200% рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рд╕рдВрддреБрд╖реНрдЯ рд╣реИред рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЕрджреНрднреБрдд рд╣реИред
рд╕рднреА рдХреЛрдб рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ, рдПрдиреЛрдЯреЗрдЯ, рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдмреАрдПрд╕рдбреА (рд╕рдВрд╢реЛрдзрд┐рдд) рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд
рдЬреАрдердм рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред