рдкреЛрд░реНрдЯрд┐рдВрдЧ # LINQ PHP рдХреЗ рд▓рд┐рдП

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 рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдПрдХрд▓ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд - рд╕рдм рдХреБрдЫ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдкреВрд░реНрд╡ рдЙрдиреНрдореВрд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЕрдиреНрдп рдкреНрд▓рд╕ рд╣реИрдВ:
PHP рдореЗрдВ рдПрдХ рд╣реА рдЯреВрд▓ рдХрд╛ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ C # рдореЗрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб рдХреЗред рдФрд░ рдпрджреНрдпрдкрд┐ рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ LINQ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдИ рд╕реА # рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ PHP рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╣рд░ рдХрд┐рд╕реА рдХрд╛ рд╕реНрд╡рд╛рдж рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред

рдирдХрд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА?

рд╣рдо рдпрд╣ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ C # рдХреА рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ PHP рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред
рдорд╛рдореВрд▓реА рдЕрдВрддрд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рддрдереНрдп рдХрд┐ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ( 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 рд╕реЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Iterators рдХреЛ LINQ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рднреА рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрд▓рд╕реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдпрджрд┐ LINQ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдЪреНрдЪрддрдо рдирд┐рд╖реНрдкрд╛рджрди рдЧрддрд┐, рд╕реБрдВрджрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдФрд░ рдЖрдИрдбреАрдИ рдореЗрдВ рд░рд┐рдлреИрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд▓реЗрдЦрдХ "рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрдз PHP рдХреЛрдб рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред SQL рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдкреБрди: рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, SQL рдХрд╣рддреЗ рд╣реИрдВред рдХреБрдЫ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП $x ==> $x*$x ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдИрдбреАрдИ рдореЗрдВ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдФрд░ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рд▓рдВрдмрд╛ рд╣реИ, рдХреЛрдб рдХреИрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

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

 $exp = new ExpressionBuilder(); $exp->add(1); $exp->add('+',1); $exp->add(2); $exp->export(); // [1, 2, 2, '+'] 

рдкрд░рд┐рдЪрд╛рд▓рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдФрд░ рдХреЛрд╖реНрдардХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Expression рдХреНрд▓рд╛рд╕ рдЕрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдРрд░реЗ рд╕реЗ рдЪрд▓рддреА рд╣реИ рдФрд░, рдпрджрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдЯрд╛рдЗрдк OperationInterface рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреИрдХ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рд╡рд╛рдкрд╕ рдлреЗрдВрдХрддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдорд╛рди рд░рд╣рддрд╛ рд╣реИ - рдкрд░рд┐рдгрд╛рдоред рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, LambdaInstance рдХреНрд▓рд╛рд╕ рдФрд░ рдЗрд╕рдХреЗ Lambda рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╛рд╡ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
  1. рддрд░реНрдХ, рд╕реНрдерд┐рд░рд╛рдВрдХ рддрдХ рдкрд╣реБрдВрдЪ
     /*   */ $f = Lambda::v(); $f = function ($x) { return $x; }; 
  2. рдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди, рддреБрд▓рдирд╛ рд╕рдВрдЪрд╛рд▓рди, рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди
     $f = Lambda::v()->add()->v()->mult(12)->gt(36); $f = function ($x) { return $x + $x*12 > 36; }; 
  3. рдХреЛрд╖реНрдардХ
     $f = Lambda::v()->mult()->begin()->c(1)->add()->v()->end(); $f = function ($x) { return $x * (1 + $x); }; 
  4. рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди
     $f = Lambda::v()->like('hallo%'); 
  5. рд╕рд░рдгреА рдкреАрдврд╝реА
     $f = Lambda::complex([ 'a'=>1, 'b'=>Lambda::v() ]); $f = function ($x) { return [ 'a' => 1, 'b' => $x ]; }; 
  6. рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ, рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ
     $f = Lambda::v()->items('car'); $f = Lambda::v()->getCar(); $f = Lambda::car; $f = function ($x) { return $x->getCar(); }; 
  7. рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдУ
     $f = Lambda::substr(Lambda::v(), 3, 1)->eq('a'); $f = function ($x) { return substr($x,3,1) == 'a'; }; 
  8. рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП 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 рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛ рдпрд╛ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХрд╛ рдПрдХ рдореБрдЦреМрдЯрд╛ рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддреЛ рдпрд╣ рдПрдХ рд╕рд░рдгреА ( 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% рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рд╕рдВрддреБрд╖реНрдЯ рд╣реИред рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЕрджреНрднреБрдд рд╣реИред

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

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


All Articles