화살표 함수

화살표 함수는 익명 함수에 대한 보다 간결한 구문으로 PHP 7.4에 도입되었습니다.

익명 함수와 화살표 함수는 모두 Closure 클래스를 사용하여 구현됩니다.

화살표 함수의 기본 형식은 fn (argument_list) => expr입니다.

화살표 함수는 상위 범위의 변수를 사용하는 것이 항상 자동이라는 점을 제외하고 익명 함수와 동일한 기능을 지원합니다.

표현식에 사용된 변수가 상위 범위에 정의되면 값에 따라 암시적으로 캡처됩니다. 다음 예에서 $fn1$fn2 함수는 같은 방식으로 작동합니다.

예제 #1 화살표 함수는 값으로 변수를 자동으로 캡처합니다.

                  
<?php

$y = 1;

$fn1 = fn($x) => $x + $y;
// equivalent to using $y by value:
$fn2 = function ($x) use ($y) {
    return $x + $y;
};

var_export($fn1(3));
?>
                  
                

위의 예는 다음을 출력합니다.

4
                

화살표 함수가 중첩된 경우에도 작동합니다.

예제 #2 화살표 함수는 중첩된 경우에도 값으로 변수를 자동으로 캡처합니다.

                  
<?php

$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
// Outputs 51
var_export($fn(5)(10));
?>
                  
                

익명 함수와 유사하게 화살표 함수 구문은 매개변수 및 반환 유형, 기본값, 가변성, 참조에 의한 전달 및 반환을 포함한 임의의 함수 서명을 허용합니다. 다음은 모두 화살표 함수의 유효한 예입니다.

예제 #3 화살표 함수의 예

                  
<?php

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

?>
                  
                

화살표 함수는 값별 변수 바인딩을 사용합니다. 이것은 화살표 함수 내에서 사용되는 모든 변수 $x에 대해 use($x)를 수행하는 것과 거의 같습니다. 값에 의한 바인딩은 외부 범위에서 값을 수정할 수 없음을 의미합니다. 참조에 의한 바인딩 대신 익명 함수를 사용할 수 있습니다.

예제 #4 외부 범위의 값은 화살표 함수로 수정할 수 없습니다.

                  
<?php

$x = 1;
$fn = fn() => $x++; // Has no effect
$fn();
var_export($x);  // Outputs 1

?>
                  
                
변경 로그

Version Description
7.4.0 화살표 기능을 사용할 수 있게 되었습니다.
노트

참고: 화살표 함수 내에서 func_num_args(), func_get_arg()func_get_args()를 사용할 수 있습니다.