현재 위치: > 최신 기사 목록> 익명 함수에서 외부 변수를 참조하기 위해 사용을 추가하는 것을 잊었습니다.

익명 함수에서 외부 변수를 참조하기 위해 사용을 추가하는 것을 잊었습니다.

M66 2025-06-05

PHP 개발 중에 Array_Filter 는 일반적으로 사용되는 배열 처리 기능으로 개발자가 콜백 함수를 통해 배열의 요소를 필터링 할 수 있습니다. 이 기능의 기본 구문은 간단하지만 쉽게 간과되는 세부 사항이 있습니다. 그렇지 않으면 코드가 예상대로 작동하지 않을 수 있으며 논리적 오류로 이어질 수도 있습니다. 이 기사에서는이 문제를 심층적으로 분석하고 사용이 사용되어야하는 이유를 설명합니다.

1. Array_Filter 소개

Array_Filter 의 함수는 콜백 함수를 사용하여 배열의 값을 필터링하고 콜백 함수가 true를 반환하는 요소 만 사용하는 것입니다. 기본 사용량은 다음과 같습니다.

 $input = [1, 2, 3, 4, 5];

$output = array_filter($input, function($value) {
    return $value > 3;
});

// 산출: [4, 5]

위의 코드에서 Array_Filter는 익명 함수를 통해 3보다 큰 값을 필터링합니다.

2. 외부 변수를 참조하는 데 사용하지 않는 문제

더 복잡한 시나리오를 살펴 보겠습니다. 동적 조건에 따라 배열의 값을 필터링해야합니다. 이 조건은 외부 변수 $ 임계 값 에 의해 결정됩니다.

 $threshold = 3;

$input = [1, 2, 3, 4, 5];

$output = array_filter($input, function($value) {
    return $value > $threshold; // ? 여기서 오류 또는 문제가 발생합니다
});

이 코드를 실행할 때 PHP는 정의되지 않은 변수 : 임계 값을 자극합니다. 익명 함수 범위가 외부 범위의 변수에 직접 액세스하지 않기 때문입니다.

3. 올바른 글쓰기 : 외부 변수를 명시 적으로 소개하는 데 사용합니다.

위의 문제를 해결하기 위해 PHP는 사용 키워드를 제공하여 외부 스코프에서 익명 함수의 로컬 범위로 변수를 도입 할 수 있습니다.

 $threshold = 3;

$input = [1, 2, 3, 4, 5];

$output = array_filter($input, function($value) use ($threshold) {
    return $value > $threshold;
});

// 산출: [4, 5]

사용 ($ 임계 값) 을 통해 익명 함수는 $ 임계 값 변수에 올바르게 액세스 할 수 있습니다.

4. 작동 원리를 깊이 이해합니다

익명 함수에 외부 변수를 소개하는 데 사용 하는 경우 PHP는 실제로 이러한 변수를 함수로 값으로 전달합니다. 즉, 익명 함수에서 $ 임계 값을 수정하면 원래 변수에 영향을 미치지 않습니다.

예를 살펴 보겠습니다.

 $threshold = 3;

$filter = function($value) use ($threshold) {
    $threshold = 10;
    return $value > $threshold;
};

echo $threshold; // 仍然산출 3

익명 함수에서 외부 변수의 값을 수정하려면 참조를 사용하여 전달해야합니다.

 $threshold = 3;

$filter = function($value) use (&$threshold) {
    $threshold = 10;
    return true;
};

$filter(5);

echo $threshold; // 산출 10

5. 실제 경우 숨겨진 위험

기사 목록을 작성하고 특정 범주에 대한 기사를 필터링하려고한다고 상상해보십시오. 카테고리 ID는 외부 변수에 있습니다. 사용을 사용하는 것을 잊어 버리면 빈 배열을 얻을 수 있습니다.

 $categoryId = 2;

$articles = [
    ['id' => 1, 'category_id' => 1],
    ['id' => 2, 'category_id' => 2],
    ['id' => 3, 'category_id' => 3],
];

$filtered = array_filter($articles, function($article) {
    return $article['category_id'] == $categoryId;
});

print_r($filtered); // ? 실수,$categoryId 한정되지 않은

대신 사용을 사용한 후 :

 $filtered = array_filter($articles, function($article) use ($categoryId) {
    return $article['category_id'] == $categoryId;
});

// ? 올바른 필터링,결과는입니다 ID ~을 위한 2 조항

6. 요약

Array_Filter 및 기타 고차 함수 (예 : Array_Map , Array_Reduce 등)를 사용하는 경우 콜백 함수에서 외부 변수를 사용해야하는 경우 사용 키워드를 사용하여 이러한 변수를 명시 적으로 전달하십시오. 그렇지 않으면 이러한 변수에 액세스 할 수 없으므로 코드 오류 또는 논리 예외가 발생할 수 있습니다.

이것은 PHP의 클로저 범위의 중요한 기능으로, 이해하면보다 강력하고 명확한 코드를 작성할 수 있습니다.

이 기사가 매일 개발 에서이 작은 함정을 피하는 데 도움이되기를 바랍니다. 클로저를 사용할 때 비슷한 문제가 발생하면 사용이 누락되었는지 확인할 수도 있습니다!