여러 PHP 익명 함수 사용 예 요약

伊谢尔伦
풀어 주다: 2023-03-12 09:52:01
원래의
2032명이 탐색했습니다.

PHP가 5.5 버전으로 출시되었다는 사실을 나도 모르게 알게 되었고, PHP5.2를 사용하고 있는데, 보니 시골스럽고 뒤떨어진 산 청년처럼 보입니다. javascript에서 클로저 사용에 익숙해진 후 갑자기 PHP 클로저에 관심이 생겼습니다.

그래서 저는 WAMP 통합 개발 환경인 PHP5.3 버전을 온라인으로 다운로드했습니다(PHP5.3에서 클로저 기능이 도입되기 시작했습니다). WAMP는 설치와 사용이 정말 편리하다고 말씀드리고 싶습니다. 간단한 구성을 마친 후 시작해 보겠습니다.

익명 함수
클로저에 관해서는 클로저 함수(클로저)라고도 불리는 익명 함수를 생각해야 합니다. PHP 클로저 구현이 주로 이에 의존하는 것 같습니다. 익명 함수 선언은 다음과 같습니다.

코드는 다음과 같습니다.

$func = function() {
}; //带结束符
로그인 후 복사


보시다시피 익명 함수에는 이름이 없으므로 사용하려면 변수에 반환해야 합니다. 익명 함수도 일반 함수처럼 매개변수를 선언할 수 있고 호출 방법도 동일합니다.

코드는 다음과 같습니다.

$func = function( $param ) 
{    
echo $param;
};
$func( 'some string' );
//输出://some string
로그인 후 복사

그런데 PHP가 클로저를 도입하기 전에는 익명 함수를 생성할 수 있는 함수도 있었습니다. : 함수를 생성하지만 Logic 코드는 string로만 작성할 수 있는데, 매우 모호하고 유지 관리가 어려워서 사용하는 사람이 거의 없습니다.

클로저 구현
익명 함수를 일반 함수의 매개변수로 전달하고 반환할 수도 있습니다. 이는 간단한 폐쇄를 구현합니다.

아래에는 세 가지 예가 있습니다

코드는 다음과 같습니다.

//例一
//在函数里定义一个匿名函数,并且调用它
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
클로저는 코드 블록의 컨텍스트에서 일부 변수와 값을 ​​​​저장할 수 있습니다. 그들이 위치한 곳. 기본적으로 PHP에서 익명 함수는 자신이 위치한 코드 블록에서 컨텍스트 변수를 호출할 수 없지만 use 키워드를 사용해야 합니다.

또 다른 예를 살펴보겠습니다.

코드는 다음과 같습니다.

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

보시다시피 달러는 use 키워드에 선언되어 있지 않으며 이 익명 함수에서는 얻을 수 없으므로 비용을 지불해야 합니다. 개발 중에 이 문제에 주의를 기울이십시오.

익명 함수에서 컨텍스트 변수를 변경하는 것이 가능한지 궁금해하시는 분들도 계시겠지만, 제가 확인한 결과는 불가능했습니다.

코드는 다음과 같습니다.

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 클로저의 특성에 대해서는 별로 놀랄 일이 아닙니다. 실제로 유사하거나 훨씬 더 강력한 기능을 사용할 수 있습니다. js 클로저와 비교하면 앞으로 PHP의 클로저 지원이 개선되기를 기대할 수 있습니다. 그러나 익명 함수는 여전히 매우 유용합니다. 예를 들어 preg_replace_callback과 같은 함수를 사용할 때 외부에서 콜백 함수를 선언할 필요가 없습니다.

위 내용은 여러 PHP 익명 함수 사용 예 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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