PHP 익명 함수(폐쇄 함수)상세 설명

PHP 에서 익명 함수(Anonymous functions)는 패키지 함수(closures)라 고도 부 르 며 지정 한 이름 이 없 는 함 수 를 임시로 만 들 수 있 습 니 다.리 셋 함수(callback)의 인자 로 자주 사 용 됩 니 다.물론 다른 애플 리 케 이 션 도 있다.
php 클 로 징 은 PHP 5.3 버 전 이후 에 만 가능 합 니 다.
폐쇄 란 무엇 입 니까?패 킷 을 닫 는 것 은 자유(특정 대상 에 연결 되 지 않 음)변 수 를 포함 할 수 있 는 코드 블록 입 니 다.이러한 변 수 는 이 코드 블록 이나 모든 전역 컨 텍스트 에서 정의 되 는 것 이 아니 라 코드 블록 을 정의 하 는 환경 에서 정의 되 는 것 입 니 다(부분 변수)."패키지'라 는 단 어 는 다음 과 같은 두 가지 결합 에서 유래 한다.실행 할 코드 블록(자유 변수 가 코드 블록 에 포함 되 어 있 기 때문에 이러한 자유 변수 와 인용 대상 이 방출 되 지 않 았 다)과 자유 변수 에 연 결 된 계산 환경(역할 영역)을 제공한다.프로 그래 밍 분야 에서 우 리 는 쉽게 말 할 수 있다.서브 함 수 는 부모 함수 중의 국부 변 수 를 사용 할 수 있 는데 이런 행 위 를 폐쇄 라 고 한다.
PHP 익명 함수 와 패 킷 을 닫 는 데 사용 되 는 문법 은 일반 함수 와 같 지만 익명 편지 와 패 킷 수 는 함수 로 위장 한 대상 입 니 다.
익명 함수:이름 이 없 는 함수 입 니 다.익명 함 수 는 변수,대상 에 게 값 을 부여 할 수 있 습 니 다.그러나 익명 함 수 는 함수 이기 때문에 호출 할 수 있 고 매개 변수 도 들 어 갈 수 있 습 니 다.익명 함 수 는 함수 나 방법의 반전 으로 특히 적합 합 니 다.
패 킷 닫 기:생 성 할 때 주변 상 태 를 패키지 하 는 함 수 를 말 합 니 다.패 킷 이 있 는 환경 이 존재 하지 않 더 라 도 패 킷 에 포 장 된 상 태 는 존재 합 니 다.
주의:이론 적 으로 폐쇄 와 익명 함 수 는 서로 다른 개념 입 니 다.그러나 PHP 는 이 를 같은 개념 으로 간주 합 니 다.
패 킷 을 닫 는 문법 은 상당히 간단 하 다.주의해 야 할 키 워드 는 use 뿐 이 고 use 는 패 킷 과 외부 변 수 를 연결 하 는 것 이다.

$a = function() use($b) {
 //TO-DO
};
다음은 폐쇄 를 실현 하 는 몇 가지 예 를 드 리 겠 습 니 다.

//  :           ,     
function callFunc( $func ) {
  $func( "some string\r
" ); } $printStrFunc = function( $str ) { echo $str; };

//  :              。     js,          
callFunc( $printStrFunc );
callFunc( function( $str ) {
  echo $str;
} );

//   :             :USE
function getMoney() {
 $rmb = 1;
 $dollar = 6;
 $func = function() use ( $rmb ) {
  echo $rmb;
  echo $dollar;
 };
 $func();
}
getMoney();
//  :1
//  ,   dorllar  

//  :              
function getMoney() {
  $rmb = 1;
  $func = function() use ( &$rmb ) {
   echo $rmb . "<br>";
     // $rmb   1
   $rmb++;
 };
 $func();
 echo $rmb;
}
getMoney();
//  :
//1
//2
폐쇄 는 문법 과 실현 이 매우 간단 하지만 잘 쓰 기 는 쉽 지 않다.
잘 쓰 면 우 리 를 도 울 수 있다.
  • 1 foreach 의 순환 을 줄 이 는 코드
  • 2 함수 의 인자 감소
  • 3 재 귀 함수 해제
  • 총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

    좋은 웹페이지 즐겨찾기