화살표 함수
화살표 함수는 익명 함수에 대한 보다 간결한 구문으로 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()를 사용할 수 있습니다.