익명 함수의 PHP 변수


119

나는 PHP에서 익명의 함수를 가지고 놀았고 그것들이 그들 외부의 변수에 도달하지 않는 것 같다는 것을 깨달았습니다. 이 문제를 해결할 방법이 있습니까?

예:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

이것은 "nothing"을 출력 할 것입니다. 익명 함수가 액세스 할 수있는 방법이 $variable있습니까?

답변:


277

예, 클로저를 사용합니다 .

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

$variable익명 함수의 범위 밖에서 수정 된 값 을 수정 하고 검색 할 수 있으 려면를 사용하여 클로저에서 참조되어야합니다 &.


이것은 새롭다! PHP 5.3의 새로운 구문입니다.
Rocket Hazmat 2012

1
@Rocket 따라서 공정하게 말하면 진정한 익명 함수 구문 (반대 create_function())이고 use키워드는이 를 설명 하는 동일한 문서 페이지 에 (나쁘게) 문서화 되어 있습니다.
DaveRandom

4
모를 수있는 사람들을위한 빠른 메모 : &객체를 전달할 때 객체를 삭제할 수 있습니다 . 객체는 항상 참조로 전달되기 때문입니다 ... 그리고 유형 힌트를 잊지 마세요 :) 예 :function() use (PDO $pdo) {
keyboardSmasher

@Alliswell 아니요, 개체에만 해당됩니다. 그렇지 않으면 변수를 수정하기 위해 참조로 전달해야합니다. 이 예를 참조하십시오 .
nickb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.