익명 함수
클로저에 관해서는 클로저 함수(클로저)라고도 불리는 익명 함수를 생각해야 합니다. PHP 클로저 구현이 주로 이에 의존하는 것 같습니다. 익명 함수 선언은 다음과 같습니다.
$func = function() { }; //带结束符
보시다시피 익명 함수에는 이름이 없으므로 사용하려면 변수에 반환해야 합니다. 익명 함수도 일반 함수처럼 매개변수를 선언할 수 있으며 호출 방법은 동일합니다:
$func = function( $param ) { echo $param; };$func( 'some string' ); //输出: //some string
그런데 PHP가 클로저를 도입하기 전에는 익명 함수를 생성할 수 있는 함수도 있었습니다. 함수를 생성하지만 코드 로직은 모호하고 유지 관리가 어려워서 사용하는 사람이 거의 없습니다.
클로저 구현
익명 함수를 일반 함수의 매개변수로 전달하고 반환할 수도 있습니다. 이는 간단한 폐쇄를 구현합니다.
//例一 //在函数里定义一个匿名函数,并且调用它 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; } );
클로저와 외부 변수를 연결하는 키워드: USE
function getMoney() { $rmb = 1; $dollar = 6; $func = function() use ( $rmb ) { echo $rmb; echo $dollar; }; $func(); }getMoney(); //输出: //1 //报错,找不到dorllar变量
클로저는 일부 변수와 값을 해당 코드 블록의 컨텍스트에 저장할 수 있습니다. 기본적으로 PHP에서 익명 함수는 자신이 위치한 코드 블록에서 컨텍스트 변수를 호출할 수 없지만 use 키워드를 사용해야 합니다. 또 다른 예를 살펴보겠습니다.
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
요약:
PHP 클로저의 특성은 별로 놀랍지 않습니다. 실제로 CLASS를 사용하면 유사하거나 훨씬 더 강력한 기능을 얻을 수 있습니다. 향후 PHP 클로저 지원을 개선합니다. 그러나 익명 함수는 여전히 매우 유용합니다. 예를 들어 preg_replace_callback과 같은 함수를 사용하는 경우 외부에서 콜백 함수를 선언할 필요가 없습니다.
더 많은 관련 콘텐츠를 보려면 PHP 중국어 웹사이트를 방문하세요: PHP 비디오 튜토리얼
위 내용은 PHP 클로저에 대한 자세한 설명(자세한 예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!