Detaillierte Erklärung anonymer Funktionen und Abschlussfunktionen in PHP

零到壹度
Freigeben: 2023-03-23 16:00:02
Original
3083 Leute haben es durchsucht

Der Inhalt dieses Artikels besteht darin, Ihnen eine detaillierte Erklärung der anonymen Funktionen und Schließungsfunktionen in PHP zu geben. Freunde in Not können sich auf

Anonymität beziehen in PHP-Funktion und Abschlussfunktion


Tags: anonyme Funktion Abschlussfunktion PHP-Abschlussfunktion PHP anonyme Funktion Funktionsverwendung


Einführung: Anonym Funktionen und Abschlussfunktionen sind keine besonders fortgeschrittenen Kenntnisse, aber viele Freunde, die gerade erst anfangen, sind immer verwirrt, weil jeder es gewohnt ist, Funktionen nur zum Aufrufen zu schreiben. Wofür werden anonyme Funktionen und Abschlussfunktionen verwendet?

Anonyme Funktionen

Die offizielle Erklärung von PHP lautet wie folgt:
Anonyme Funktionen (Anonyme Funktionen), auch Abschlüsse genannt, ermöglichen die vorübergehende Erstellung einer Funktion ohne angegebenen Namen . Der Wert, der am häufigsten als Callback-Funktionsargument verwendet wird. Natürlich gibt es auch andere Anwendungen.

Was hier gesagt wird, ist sehr einfach, es kann als Rückruffunktion verwendet werden. Das folgende Beispiel ist als Rückruffunktion

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

Im obigen Beispiel , preg_replace_callback Die Funktion erfordert drei Parameter. Der erste Parameter ist ein regulärer Ausdruck, der zum Abgleichen von Daten verwendet wird, der zweite Parameter ist eine Funktion und der dritte Parameter ist die Zeichenfolge, die abgeglichen werden muss Es sieht wie folgt aus

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

Aber wir sehen, dass wir diese Methode nur einmal verwenden müssen, sodass es nicht nötig ist, sie erneut zu benennen und sie nicht einer Variablen (dem Prozess) zuzuweisen der Zuweisung von Werten zu Variablen: PHP konvertiert diesen Ausdruck automatisch in eine Objektinstanz der integrierten Klasse „Closure“ und weist ihn einer Variablen zu)

Closure-Funktion

Anonyme Funktionen in PHP werden auch Abschlussfunktionen genannt, daher gibt es keinen Unterschied. Aber das Konzept des Abschlusses im allgemeinen Sinne ist nicht so. Lassen Sie uns zunächst über den Abschluss im herkömmlichen Sinne sprechen und einen Artikel zum Vergleich von Abschlüssen in js mit Abschlüssen (anonymen Funktionen) in PHP bereitstellen.
Javascript-Abschluss (Closure) lernen - Ruan Yifeng

In PHP gibt es eigentlich keine Abschlussfunktion im herkömmlichen Sinne, da Funktionen in PHP keine Variablen im Gültigkeitsbereich aufrufen können. Wie folgt:

<?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
    ?>
Nach dem Login kopieren

Aus dem obigen Artikel wissen wir, dass dies in js möglich ist. Daher werden anonyme Funktionen in PHP auch als Abschlussfunktionen bezeichnet. Sie können auch Variablen aus dem übergeordneten Bereich an die Abschlussfunktion übergeben (wodurch ein ähnlicher Effekt erzielt wird wie beim Abrufen von übergeordneten Bereichsvariablen durch js). Das Schlüsselwort „use“ wird in PHP wie folgt verwendet >

<?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

?>
Nach dem Login kopieren
Unterscheidet sich die Ausgabe des obigen Beispiels von Ihrer Meinung?

Analyse: Die Abschlussfunktion (anonyme Funktion) verwendet use, um die Nebeneffektdomänenvariable zu erhalten, wenn die Funktion definiert ist, unabhängig davon, wann sie aufgerufen wird. Wenn Sie beim Aufruf den Variablenwert erhalten möchten, müssen Sie ihn als Referenz übergeben. Die Verwendung hängt vom Nutzungsszenario ab.

Listet mehrere gängige Szenarien auf

  1. als Rückruffunktion

    //一个我们使用过的例子
    <?php/*
     * 菜谱拆分食物后的拼接
     * 参数均不能为空
     * */public function mergeFoodsStr($str,array $mapping){
     //        $str = &#39;白菜半棵、__2__鲍菇两只、__0__一根,__1__两根,三者比例为100:100:15,酱油5克,香油2克,盐1克。&#39;;//        $mapping = array(//            0 =>array(&#39;name&#39; => &#39;胡萝卜&#39;,&#39;id&#39; =>  &#39;81&#39; ),//            1 =>array ( &#39;name&#39; => &#39;萝卜&#39;, &#39;id&#39; =>  &#39;72&#39;),//            2 =>array ( &#39;name&#39; =>  &#39;杏&#39;, &#39;id&#39; => &#39;1841&#39;)//        );
        if(empty($str) || empty($mapping)){        return false;
        }    $strNew = preg_replace_callback(&#39;"|__(\d)__|" &#39;,function ($matches) use ($mapping){
            return $mapping[$matches[1]][&#39;name&#39;];
        },$str);    $this->log(&#39;拼接后的食材字符串&#39;,$strNew);    return $strNew;
    }?>
    Nach dem Login kopieren
  2. Wenn Es handelt sich um eine Funktion zur einmaligen Verwendung, die nicht wiederverwendet werden kann. Sie können die Abschlussfunktion

  3. Verwenden Sie die Funktion array_work() mit der anonymen Funktion, um die Anzahl der foreach zu reduzieren Schichten

  4. Warten

  5. Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung anonymer Funktionen und Abschlussfunktionen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage