문제

이 예제는 PHPTherightway의 기능 프로그래밍 페이지에서 가져온 것입니다.

<?php
/**
 * Creates an anonymous filter function accepting items > $min
 *
 * Returns a single filter out of a family of "greater than n" filters
 */
function criteria_greater_than($min)
{
    return function($item) use ($min) {
        return $item > $min;
    };
}

$input = array(1, 2, 3, 4, 5, 6);

// Use array_filter on a input with a selected filter function
$output = array_filter($input, criteria_greater_than(3));

print_r($output); // items > 3

의 목적은 무엇입니까? return function() ?

나는 방금 이것을 썼고 그것은 같은 일을한다.

array_filter($input, function($input) use ($min) {
    return $input > $min;
}); // items > 3

이 콜백을 함수로 임명하더라도 보조 기능은 불필요 해 보입니다.

나는 무언가를 간과 했습니까 아니면 다른 목적을 가지고 있습니까?

도움이 되었습니까?

해결책

절대적으로 필요합니다 criteria_greater_than 반환하려는 값을 반환합니다. 예를 들어. 함수가 값 5를 반환하려면 :

function get_5() {
    return 5;
}

당신은 그것을 사용합니다 $var = get_5();,하지만 당신이 그것을 상수로 설정한다면 당신은 그냥 할 것입니다 $var = 5; 또는 call_my_function(5). 사용해야합니다 return 함수에서 무엇이든 반환하기 위해. 이제이 기능을 고려하십시오.

function get_fx($x)
{
    return function () use ($x)
           {
               return $x;
           };
}

$v5 = get_fx(5);
$v6 = get_fx(6);

무엇인가 $v5 그리고 $v6? .. 글쎄 그들은 기능입니다. 사실로 $v5() == get_5() 사실이지만 $ 6 () == get_5 ()는 거짓이기 때문에 get_fx 통과 된 인수에 따라 다른 기능 (폐쇄)을 반환합니다.

당신이 첫 번째를 건너 뛰면 return 첫 번째 기능에서 아무것도 얻지 못할 것입니다. $ v5와 $ v6에는 할당 된 것이 없습니다. 두 번째를 건너 뛰면 return 반환 된 기능에서는 호출 할 때 아무것도 반환하지 않습니다. $v5() 5와 반환하지 않을 것입니다 $v6() 반환되지 않을 것입니다.

다른 팁

두 번째 매개 변수 array_filter ~이다 callback. 당신은 그것을 내부에 지정할 수 있습니다 array_filter ~처럼 anonymous function 또는 함수의 이름을 지정하십시오. 내면에 anonymous function 당신은 필터링을합니다 return 사용된. 두 번째 반환은 익명 기능을 콜백으로 사용하는 것입니다. array_filter 이 기능에 대한 참조를 반환합니다.

두 번째 함수를 사용하면 콜백뿐만 아니라 Array_Filter뿐만 아니라 한 번에 콜백 및 여과 컨텍스트 ($ min)를 전달할 수 있습니다. 코드를 재사용하는 변의 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top