>백엔드 개발 >PHP 튜토리얼 >PHP 클로저에 대한 자세한 소개(코드 포함)

PHP 클로저에 대한 자세한 소개(코드 포함)

不言
不言앞으로
2019-04-12 10:07:072459검색

이 글은 PHP 클로저(코드 포함)에 대한 자세한 소개를 담고 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

PHP의 클로저에 대한 많은 설명을 읽었습니다. 각 문서는 대략적으로 동일한 의미를 표현하고 있지만 이해하기가 매우 어렵습니다.

우리 모두 알고 있듯이, PHP의 클로저는 function () use (){};

이 글은 3단계로 나누어져 있습니다:

1 클로저 사용법을 설명하세요
1: 클로저에서의 사용법. - 1부

function () use($param){} function () use($param){};
$param = 1;
$data = function () use ($param)
{
    var_dump($param);    
};

$data();

$param = 2;
$data();

// 输出结果为
1
1

分析结果:use的用法相当于对象(类的用法),$data(),表示实例化一次,然而语言有着文本流的特性,第二次$data()没有重新实例,实例的时候取到的值是1,所以输出结果为上面结果;

2:闭包中的use使用-下篇

$param = 1;
$data = function () use ($param)
{
    var_dump($param);    
};

$data();

$param = 2;
$data = function () use ($param)
{
    var_dump($param);    
};
$data();

// 输出结果为
1
2

分析结果:文本流的形式,又实例化一次变量所以存储变量为2,最终输出为2;

3:闭包中function()后面的括号,use前面的括号用法

function ($obj) use($param){};
    $param = 1;
    $data = function ($obj) use ($param)
    {
        var_dump($obj);
        var_dump($param);    
    };
    $data(2);
    
    $data(3);
    
    $param = 2;
    $data(4);
    // 输出
    2
    1
    
    3
    1
    
    4
    1
분석 결과: use의 사용법은 객체의 사용법(클래스 사용법)과 동일합니다. ()는 1회 인스턴스화를 의미합니다. 단, 언어는

텍스트 흐름

의 특성을 가지고 있습니다. $data()는 두 번째로 인스턴스화되지 않습니다. 인스턴스가 1이므로 출력 결과는 위 결과입니다.

2: 패키지에서 닫힌 사용 - 2부

    $arr = [
        '米' => ['咸粥', '甜粥', '米饭'], 
        '面' => ['面条', '花卷', '馒头'], 
    ];

    $param = '';
    $bag = function ($data) use ($param)
    {
        $l = count($data);
        return $data[rand(0, $l-1)];
    };

    $eat_arr = [];
    
    foreach ($arr as $key => $value) {
        $each_arr[] = '吃'.$key.':'.$bag($value);        
    }

    echo implode(',', $each_arr);
    
    // 输出
    吃米:米饭,  吃面:面条
    吃米:甜粥,  吃面:馒头
분석 결과:

text flow

형식으로 변수가 다시 인스턴스화되므로 저장됩니다. 변수는 2이고 최종 출력은 2입니다.

3: 클로저에서 function() 뒤의 대괄호, 사용 전 대괄호의 사용법

function ($obj) use($param){}; /code>

    $arr = [
        '米' => ['咸粥', '甜粥', '米饭'], 
        '面' => ['面条', '花卷', '馒头'], 
    ];

    $eat_arr = [];
    
    foreach ($arr as $key => $value) 
    {
        $bag = function () use ($value)
        {
            $l = count($value);
            return $value[rand(0, $l-1)];
        };

        $each_arr[] = '吃'.$key.':'.$bag();        
    }

    echo implode(',', $each_arr);
    // 输出
    吃米:甜粥, 吃面:面条
    吃米:甜粥, 吃面:花卷
분석 결과: 함수 뒤의 괄호는 함수의 사용법과 동일하며 함수가 호출될 때마다 전달됩니다. 입력 데이터는 동일하며 매번 전달해야 하며 후속 use는 인스턴스가 한 번 후에 변경되지 않음을 나타내므로 obj는 언제든지 변경할 수 있습니다.

2. 클로저 인스턴스


예제 1:

rrreee🎜예제 2: 🎜rrreee🎜3. 클로저 요약🎜🎜 함수와의 차이점은 추가 사용 중간 값이 추가된다는 점입니다. 주의할 점은 🎜함수 뒤의 ()는 변수 변수이고, use()의 변수는 한 번 인스턴스화된 후에 변경되지 않는 변수라는 것입니다. 루프에서 클로저를 작성하는 것은 다음과 동일하므로 별로 유용하지 않습니다. 매번 인스턴스화하므로 호출하기 전에 메소드를 정의하여 클로저를 작성할 수 있습니다. 🎜🎜클로저와 함수의 실제 차이점: 🎜🎜기능: 한 번에 여러 호출을 캡슐화합니다. 🎜폐쇄: 이 방법에서만 사용되며 결합 정도가 너무 낮아 무시할 수 있습니다. 🎜

위 내용은 PHP 클로저에 대한 자세한 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제