PHP 7.4 рдореЗрдВ рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ (рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА)

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдорддрджрд╛рди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ (рдкрдХреНрд╖ рдореЗрдВ 51 рд╡реЛрдЯ, 8 рдХреЗ рдЦрд┐рд▓рд╛рдл)ред


рдпрд╣ рдерд╛:


$result = array_filter($paths, function ($v) use ($names) { return in_array($v, $names); }); 

рдпрд╣ рдмрди рдЧрдпрд╛:


 $result = array_filter($paths, fn($v) => in_array($v, $names)); 

рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдг


рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:


рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕


 fn(_) => _ 

рдПрдХ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ, рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдкреНрд░рдХрд╛рд░, рдЪреВрдХ рдЖрджрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 fn(array $x) => $x; fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest; 

рдЪреЗрддрд╛рд╡рдиреА! рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб fn , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрд┐рдЫрдбрд╝реА рд╣реБрдИ рдЕрд╕рдВрдЧрддрд┐!


рдЕрдиреНрдп (рдЦрд╛рд░рд┐рдЬ) рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рдЪрд╛рд░


рдорд╛рдирд╛ рд╡рд┐рдХрд▓реНрдк:


  //  ,        ($x) => $x * $y //   ,     ,     { ($x) => $x + $y } //     Hack;       ($x) ==> $x * $y // ,      ($x) -> $x * $y //      $x-- > $x*$y $x --> $x * $y //    Rust,    |$x| => $x * $y 

рдФрд░ рдХреБрдЫ рдЕрдиреНрдп


рдЪрд░ рдХреЛ рдмрдВрдж рдХрд░рдирд╛


рдорд╣рддреНрд╡рдкреВрд░реНрдг! Php рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд▓реЙрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЪрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░реЗ рдореВрд▓ рдкреИрдорд╛рдиреЗ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред


рдпрд╣рд╛рдБ рдмрд░рд╛рдмрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ:


 $y = 1; $fn1 = fn($x) => $x + $y; $fn2 = function ($x) use ($y) { return $x + $y; }; 

$ рдпрд╣ рдЪрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪрд░ рдХреА рддрд░рд╣ рд╣реА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 class Test { public function method() { $fn = fn() => var_dump($this); $fn(); // object(Test)#1 { ... } $fn = static fn() => var_dump($this); $fn(); // Error: Using $this when not in object context } } 

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


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


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


 $result = Collection::from([1, 2]) ->map(fn($v) => $v * 2) ->reduce(fn($tmp, $v) => $tmp + $v, 0); echo $result; //6 

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


рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╕реНрддрд╛ рдЙрддреНрдкрд╛рджрди рдкреЙрдбрдХрд╛рд╕реНрдЯ рдореЗрдВ рдкреАрдПрдЪрдкреА рдореЗрдВ рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╕рджрд╕реНрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред


RFC рд▓рд┐рдВрдХ

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


All Articles