반응형
익명 함수를 매개 변수로 사용하여 외부 변수 액세스
기본적으로 이 편리한 기능을 사용하여 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
반응형
'programing' 카테고리의 다른 글
Node.js에서 다른 파일의 함수를 "포함"하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
---|---|
Laravel 마이그레이션 테이블이 이미 있지만 이전 테이블이 아닌 새 테이블을 추가하려고 합니다. (0) | 2022.09.23 |
팬더: 지정된 열에 대한 데이터 프레임 행의 합계 (0) | 2022.09.23 |
저장된 CSV에 Python/Pandas가 인덱스를 생성하지 않도록 하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
MySQL에서는 그룹 코드당 상위 N에 대한 쿼리가 작동하지만 Maria에서는 결과가 다릅니다.DB (0) | 2022.09.23 |