>백엔드 개발 >PHP 튜토리얼 >PHP의 익명 함수 및 클로저 함수에 대한 자세한 설명

PHP의 익명 함수 및 클로저 함수에 대한 자세한 설명

零到壹度
零到壹度원래의
2018-04-11 17:53:073111검색

이 글의 내용은 PHP의 익명 함수와 클로저 함수에 대한 자세한 설명을 공유하기 위한 것입니다. 특정 참조 값이 있습니다. 도움이 필요한 친구는

php의 익명 함수 및 클로저 함수


를 참조할 수 있습니다. 태그: 익명 함수 클로저 함수 php 클로저 함수 php 익명 함수 사용


소개: 익명 함수와 클로저 함수는 특별히 고급 지식은 아니지만, 이제 막 시작하는 많은 친구들은 모두가 익숙하기 때문에 항상 혼란스러워합니다. 위의 내용은 호출을 위한 것입니다. 익명함수와 클로저함수는 어떤 용도로 사용되나요?

익명 함수

php 공식 설명은 다음과 같습니다.
익명 함수(익명 함수), 일명 클로저 함수(클로저)를 사용하면 지정된 이름 없이 함수를 일시적으로 생성할 수 있습니다. 콜백 함수 인수로 가장 일반적으로 사용되는 값입니다. 물론 다른 응용 프로그램도 있습니다.

여기서 말하는 내용은 매우 간단합니다. 다음 예는 콜백 함수

<?php
echo preg_replace_callback(&#39;~-([a-z])~&#39;, function ($match) {
    return strtoupper($match[1]);
}, &#39;hello-world&#39;);
// 输出 helloWorld
?>

로 사용됩니다. 위 예에서 preg_replace_callback 함수에는 첫 번째 매개변수가 필요합니다. 는 데이터를 일치시키는 데 사용되는 정규식입니다. 두 번째 매개변수는 함수이고 세 번째 매개변수는 일치해야 하는 문자열입니다. 다음과 같이 작성할 수도 있습니다.

<?php
$testFunc = function ($match) {
        return strtoupper($match[1]);
    };
 
 echo preg_replace_callback(&#39;~-([a-z])~&#39;, $testFunc, &#39;hello-world&#39;);
 // 输出 helloWorld
 ?>

하지만 이 방법은 분명히 다음과 같이 작성하면 됩니다. 이름을 지정하기 위해 변수에 할당할 필요가 없습니다(변수에 값을 할당하는 과정: PHP는 자동으로 이 표현식을 객체로 변환합니다). 내장 클래스 Closure의 인스턴스를 만들어 변수에 할당)

Closure 함수

PHP에서 익명 함수를 Closure 함수라고도 부르므로 차이가 없습니다. 하지만 일반적인 의미의 클로저 개념은 이와 다릅니다. 먼저 전통적인 의미의 클로저에 대해 이야기하고, js의 클로저와 php의 클로저(익명 함수)를 비교하는 기사를 제공합니다.
Javascript 클로저(Closure) 알아보기 - Ruan Yifeng

사실 PHP에는 전통적인 의미의 클로저 함수가 없습니다. 왜냐하면 PHP의 함수는 범위 내의 변수를 호출할 수 없기 때문입니다. 아래와 같이

<?php
    function a(){
        $a = 11;        
        function b(){
            $b = 22;            
            echo $a;            
            echo $b;
        }
        b();
    }
    a();
    //报Notice:Undefined variable: a in index.php on line 6
    //22
    ?>

그리고 위의 기사를 통해 js에서도 가능하다는 것을 알 수 있습니다. 따라서 PHP의 익명 함수는 클로저 함수라고도 합니다. 상위 범위의 변수를 클로저 함수로 전달할 수도 있습니다(js가 상위 범위 변수를 얻는 것과 유사한 효과 달성). use 키워드는 다음과 같이 사용됩니다.

위 예시의 출력이 여러분이 생각하는 것과 다른가요?

Analytics: 클로저 함수(익명 함수)는 호출 시점에 관계없이 함수가 정의될 ​​때 부작용 도메인 변수를 얻기 위해 사용을 사용합니다. 호출 시 변수 값을 얻으려면 참조로 전달해야 합니다. 사용 방법은 사용 시나리오에 따라 다릅니다.

몇 가지 일반적인 시나리오를 나열합니다.

  1. 콜백 함수로

    <?php
    $count = 0;
    
    $a = function()
    { var_dump($count); };
    
    $b = function() use ($count)
    { var_dump($count); };
    
    $count++;
    
    $c = function() use (&$count)
    { var_dump($count); };
    
    $count++;
    
    $a();    // null   Notice: Undefined variable: count in
    $b();    // int 0
    $c();    // int 2
    $count++;
    $b();    // int 0
    
    ?>

  2. 재사용할 수 없는 일회용 함수인 경우 클로저 함수를 사용할 수 있습니다.

  3. array_work( ) 함수는 익명 함수와 협력하여 foreach 레이어의 수를 줄입니다

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.