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