IT

익명 함수를 매개 변수로 사용하여 외부 변수에 액세스

lottoking 2020. 9. 7. 08:25
반응형

익명 함수를 매개 변수로 사용하여 외부 변수에 액세스


기본적으로 편리한 기능을 사용하여 db 행을 처리합니다 (PDO 및 / 또는 기타 항목에 눈을 감으십시오).

function fetch($query,$func) {
    $query = mysql_query($query);   
    while($r = mysql_fetch_assoc($query)) {
        $func($r);
    }
}

이 기능을 사용하면 다음을 수행 할 수 있습니다.

fetch("SELECT title FROM tbl", function($r){
   //> $r['title'] contains the title
});

이제 모든 $r['title']변수 를 연결해야 가정 해 봅시다 (이것은 단지 예입니다).

어떻게 할 수 있습니까? 나는 이와 같은 것을 생각하고 있었지만 그다지 우아하게 만들었습니다.

$result = '';
fetch("SELECT title FROM tbl", function($r){
   global $result;
   $result .= $r['title'];
});

echo $result;

당신은 사용이 use같은 문서에 설명 :

클로저는 부모 범위에서 변수를 상속 할 수도 있습니다. 선언 변수는 헤더에서 선언해야합니다. 상위 범위에서 변수를 상속하는 전역 변수를 사용하는 것과 동일하지 않습니다. 전역 변수는 전역 범위에 존재하며 어떤 함수가 실행 되든 동일합니다.

암호 :

$result = '';
fetch("SELECT title FROM tbl", function($r) use (&$result) {
   $result .= $r['title'];
});

그러나주의하십시오 (이전 링크의 주석 중 하나에서 가져옴).

() 매개 변수는 초기 바인딩입니다. 람다 함수가 호출되는 지점 (후기 바인딩)이 아닌 람다 함수가 선언 된 지점에서 변수 값을 사용합니다.


$ func를 한 번만 호출하도록 'fetch'를 다시 작성하는 것은 어떻습니까?

function fetch($query,$func) {
    $query = mysql_query($query);   
    $retVal = array();
    while($r = mysql_fetch_assoc($query)) {
        $retVal[] = $r;
    }
    $func($retVal);
}

이렇게하면 $ func를 한 번만 호출하고 일련 배열을 다시 처리 할 수 ​​있습니까? 함수를 200 번 호출해도 성능이 확실하지 않은 것은 좋은 생각처럼 들리지 않습니다.

참고 URL : https://stackoverflow.com/questions/8403908/accessing-outside-variable-using-anonymous-function-as-params

반응형