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()));  
}

게시됨

카테고리

,

작성자

댓글

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

%d 블로거가 이것을 좋아합니다: