2011-08-05 18 views
1
function outer_function() { 
    $nid = 3; 

    function exists($var) { 
    print $nid; 
    return $var->nid == $nid; 
    } 

    $a_filtered_array = array_filter($an_array, "exists"); 
} 

외부 함수에 정의 된 변수를 사용하여이 배열을 필터링하려고하는데 변수가 정의되지 않았습니다. 이것은 JS에서 작동합니다. 여기서 내가 뭘 잘못하고 있니? PHP로 어떻게하면 되나요?PHP에서 클로저가 어떻게 작동합니까?

+0

http://www.php.net/manual/en/functions.anonymous.php –

+0

어떤 PHP 버전입니까? 적어도 5.3? –

답변

2

당신은 (제대로)이 쓸 수 :

function outer_function() { 
    $nid = 3 

    $a_filtered_array = array_filter($an_array, function ($var) use ($nid) { 
     print $nid; 
     return $var->nid == $nid; 
    }); 
} 

당신은 함수의 이름을 포함하는 문자열을 전달할 수 없습니다. 또한

function outer_function() { 
    $nid = 3 
    $exists = function ($var) use ($nid) { 
     print $nid; 
     return $var->nid == $nid; 
    } 
    $a_filtered_array = array_filter($an_array, $exists); 
} 

는 구문과 의미에 대한 심층적에 대한 http://www.php.net/manual/en/functions.anonymous.php를 참조 작성할 수 있습니다.

+1

약간의 수정 ... 당신은 "사용"을 잊지 않습니까? $ exist = function ($ var) use ($ nid) {... – laurac

+0

@laurac 예, 맞습니다. 감사합니다. –

+0

아. 나는 익명의 함수를 사용하려했지만 사용 부분을 놓쳤다. 감사. – Joren

1

그들은 작동하는 방법의 워드 프로세서

확인 익명 함수라고 :

function outer_function() 
{ 
    $nid = 3; 

    $x=function ($var) { 
    print $nid; 
    return $var->nid == $nid; 
    }; 

    $a_filtered_array = array_filter($an_array, $x); 

} 

그리고 너무 JS
에서 일 것이다이
접근 방식을 (그리고 실제로 에 대해 더 노골적인 표현은 무엇입니까?)

function x() { 
    var w=function() {alert("foo")} 
    w() 
} 
관련 문제