PHP 익명 함수 및 클로저의 역할

墨辰丷
풀어 주다: 2023-03-29 18:38:01
원래의
3067명이 탐색했습니다.

이 글은 주로 PHP 익명 함수와 클로저의 기능을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

코드는 다음과 같습니다.

$func = function() {
   
}; //带结束符
可以看到,匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量。匿名函数也像普通函数一样可以声明参数,调用方法也相同:
$func = function( $param ) {
  echo $param;
};
 
$func( 'some string' );
 
//输出:
//some string
로그인 후 복사

1. 클로저 구현

익명 함수를 일반 함수의 매개변수로 전달하고, 반환도 가능합니다. 이는 간단한 폐쇄를 구현합니다.

//例一
//在函数里定义一个匿名函数,并且调用它
function printStr() {
  $func = function( $str ) {
    echo $str;
  };
  $func( 'some string' );
}
 
printStr();
 
 
 
//例二
//在函数中把匿名函数返回,并且调用它
function getPrintStrFunc() {
  $func = function( $str ) {
    echo $str;
  };
  return $func;
}
 
$printStrFunc = getPrintStrFunc();
$printStrFunc( 'some string' );
 
 
 
 
//例三
//把匿名函数当做参数传递,并且调用它
function callFunc( $func ) {
  $func( 'some string' );
}
 
$printStrFunc = function( $str ) {
  echo $str;
};
callFunc( $printStrFunc );
 
//也可以直接将匿名函数进行传递。如果你了解js,这种写法可能会很熟悉
callFunc( function( $str ) {
  echo $str;
} );
로그인 후 복사

2. 클로저와 외부 변수를 연결하는 키워드: USE
클로저는 자신이 위치한 코드 블록의 컨텍스트에서 일부 변수와 값을 저장할 수 있습니다. 기본적으로 PHP에서 익명 함수는 자신이 위치한 코드 블록의 컨텍스트 변수를 호출할 수 없지만 use 키워드를 사용해야 합니다.

function getMoney() {
  $rmb = 1;
  $dollar = 6;
  $func = function() use ( $rmb ) {
    echo $rmb;
    echo $dollar;
  };
  $func();
}
 
getMoney();
 
//输出:
//1
//报错,找不到dorllar变量
로그인 후 복사

use 키워드에 dollar가 선언되어 있지 않아 이 익명 함수에서는 달러를 얻을 수 없는 것을 볼 수 있으니 개발 시 이 문제에 주의해야 합니다.

어떤 사람들은 익명 함수에서 컨텍스트 변수를 변경하는 것이 가능한지 궁금할 수도 있지만, 나는 그것이 불가능하다는 것을 발견했습니다:

function getMoney() {
  $rmb = 1;
  $func = function() use ( $rmb ) {
    echo $rmb;
    //把$rmb的值加1
    $rmb++;
  };
  $func();
  echo $rmb;
}
 
getMoney();
 
//输出:
//1
//1
로그인 후 복사

use는 변수의 복사본만을 참조한다는 것이 밝혀졌습니다. 하지만 복사본이 아닌 변수에 대한 전체 참조를 원합니다.

이 효과를 얻으려면 변수 앞에 & 기호를 추가하면 됩니다.

function getMoney() {
  $rmb = 1;
  $func = function() use ( &$rmb ) {
    echo $rmb;
    //把$rmb的值加1
    $rmb++;
  };
  $func();
  echo $rmb;
}
 
getMoney();
 
//输出:
//1
//2
로그인 후 복사

알겠습니다. 그러면 익명 함수가 컨텍스트 변수를 참조할 수 있습니다. 익명 함수가 외부 세계로 반환되면 익명 함수는 사용으로 참조되는 변수를 저장하지만 외부 세계에서는 이러한 변수를 얻을 수 없게 됩니다. 이렇게 하면 '클로저'의 개념이 더 명확해질 수 있습니다.

설명에 따라 위의 예를 변경하세요.

function getMoneyFunc() {
  $rmb = 1;
  $func = function() use ( &$rmb ) {
    echo $rmb;
    //把$rmb的值加1
    $rmb++;
  };
  return $func;
}
 
$getMoney = getMoneyFunc();
$getMoney();
$getMoney();
$getMoney();
 
//输出:
//1
//2
//3
로그인 후 복사

Summary: 위 내용은 이 글의 전체 내용입니다. 모두의 학습에 도움이 되기를 바랍니다.

관련 권장 사항:

PHP 사용자 로그인을 위한 쿠키 정보 보안 사용법 및 예에 대한 자세한 설명

13자리 타임스탬프를 반환하는 PHP 구현 방법

PHP에 대한 방법 및 예 자신의 자바 프로그램을 호출하는 방법 자세한 설명

위 내용은 PHP 익명 함수 및 클로저의 역할의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!