무명함수(익명함수/클로저)

무명함수(익명함수/클로저)란?

  • 단 한번만 실행하는 일회성 함수

  • 주로 콜백을 파라미터로 입력받는 함수의 파라미터로 사용됨 (JS의 setTimeout의 콜백함수를 넣듯이)

// array_filter란 배열에서 특정조건에 맞는 항목만 뽑아내는 PHP내장함수이다
// array_filter(배열, 콜백 함수);

$datas = [1,2,"3","4","오","률",7];

$checker = 2;

// 해당 배열속에서 checker = 2가 일치하는 값만 출력함
$filter_data = array_filter($datas, 
    function($item) use ($checker) {
        return $item == $checker;
    }
);
 
var_dump($filter_data); // array(1) { [1]=> int(2) }

무명함수 사용시 문제점

// 世界1
$word = 'Hello!!';
$func = function() {
  // 世界2
  echo $word;
};
$func(); // Hello가 출력될것을 예상했지만 출력되지 않음
  • 그 이유는 클로저(무명함수) 내부에서 외부의 변수를 참조하지 못하였기때문이다

그래서 아래의 use()를 사용한다

// 世界1
$word = 'Hello!!';
$func = function() use($word){
  // 世界2
  echo $word;
};
$func(); // Hello가 출력
  • use(변수)를 사용해서 클로저 내부에 변수를 전달한다


참조

https://qiita.com/westhouse_k/items/fe527b59146739cf7af3

https://wikidocs.net/116966

Nov 26, 2022 Views 104