Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in PHP-Verschlüsse (mit Code)

Detaillierte Einführung in PHP-Verschlüsse (mit Code)

不言
不言nach vorne
2019-04-12 10:07:072412Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Einführung in PHP-Verschlüsse (mit Code). Freunde in Not können darauf verweisen.

Ich habe viele Erklärungen zu Schließungen in PHP gelesen, aber es ist sehr schwierig, sie basierend auf meinem eigenen Verständnis zu beschreiben. Bitte weisen Sie darauf hin

Wie wir alle wissen, weiß jeder, dass der Abschluss von PHP function () use (){};

Dieser Artikel ist in 3 Schritte unterteilt:

1. Erklären Sie die Verwendung von Verschlüssen
1: Verwendung von „use“ in Verschlüssen – Teil 1

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

$data();

$param = 2;
$data();

// 输出结果为
1
1

Analyseergebnisse: Die Verwendung von „use“ entspricht der Verwendung von Objekte (Klassenverwendung), $data(), Zeigt die einmalige Instanziierung an. Die Sprache weist jedoch die Merkmale des -Textflusses auf. Beim zweiten Mal wird nicht erneut instanziiert , das Ausgabeergebnis ist also das obige Ergebnis; $data()

2: Verwendung in Abschlüssen – Teil 2

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

$data();

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

// 输出结果为
1
2
Analyseergebnisse: In Form eines

Textstroms Die Variable wird erneut instanziiert, daher ist die gespeicherte Variable 2 und die endgültige Ausgabe ist 2; 🎜>

    $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
Analyseergebnisse: Die Klammern nach der Funktion entsprechen der Funktion. Verwendung: Bei jedem Aufruf der Funktion werden dieselben Daten übergeben. Dies bedeutet die folgende Verwendung Die Instanz wird sich nach einmaliger Zeit nicht ändern, daher kann sich obj jederzeit ändern.

2. Abschlussinstanz
function ($obj) use($param){}; Beispiel 1:
    $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);
    
    // 输出
    吃米:米饭,  吃面:面条
    吃米:甜粥,  吃面:馒头

Beispiel 2:

    $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);
    // 输出
    吃米:甜粥, 吃面:面条
    吃米:甜粥, 吃面:花卷

3. Abschlusszusammenfassung

Abschluss Zusammenfassend Der Unterschied zur Funktion besteht darin, dass bei der Verwendung ein zusätzlicher Zwischenwert für die Verwendung hinzugefügt wird. Beachten Sie bitte, dass die Funktion () nach

eine variable Variable ist und die Variable in use() eine Instanz nach

ist Für Variablen, die sich nicht ändern, ist es nicht sehr sinnvoll, einen Abschluss in einer Schleife zu schreiben, was einer Instanziierung jedes Mal entspricht. Daher kann der Abschluss geschrieben werden, indem vor dem Aufruf eine Methode definiert wird.

Der wahre Unterschied zwischen Abschlüssen und Funktionen:

Funktion: kapselt mehrere Aufrufe gleichzeitig. Schließung: Wird nur von dieser Methode verwendet, der Kopplungsgrad ist so niedrig, dass er ignoriert werden kann.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in PHP-Verschlüsse (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen