PHP 화살표 함수(arrow function) 이용시 주의사항

한 줄 짜리 익명함수는 화살표 함수로 대체하면 코드가 깨끗해지는 느낌이라 요즘 자주 사용하고 있습니다.

$y = 1;

$fn1 = function ($x) use ($y) {
    return $x + $y;
};


// $fn1과 같음
$fn2 = fn($x) => $x + $y;

var_export($fn2(3));
// 결과: 4

특히 클로저를 쓰지 않고도 외부 변수를 사용할 수 있는게 편리하더라고요.

하지만 컬렉션의 아이템을 하나씩 처리하면서 외부 변수를 조작하려고 아래와 같은 스타일의 코드를 작성했더니 $someCollection가 변하지 않더군요.

$someCollection = collect();

$collection->each(fn($item) => $someCollection->push($item->doSomething()));  

알고보니 원래부터 안되는 것이었습니다. (매뉴얼 참고)

Example #4 Values from the outer scope cannot be modified by arrow functions

https://www.php.net/manual/en/functions.arrow.php

기본적인 내용을 몰라서 삽질을 좀 했네요. #RTFM #매뉴얼을잘읽자

외부 변수를 변경할 필요가 있는 경우엔 화살표 함수를 사용하지 말고 일반 익명함수로 처리해주시면 됩니다.

$someCollection = collect();

$collection->each(function($item) use (&$someCollection) {
    $someCollection->push($item->doSomething()));  
}

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.