programing

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

bestcode 2022. 9. 23. 00:20
반응형

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

기본적으로 이 편리한 기능을 사용하여 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'];
});

단, (이전 링크의 코멘트 중 하나에서 인용)에 주의해 주십시오.

use() 파라미터는 얼리바인딩입니다.이 파라미터는 람다 함수를 호출하는 포인트(레이트바인딩)가 아니라 람다 함수가 선언되는 포인트에서 변수 값을 사용합니다.

$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

반응형