Heim >Backend-Entwicklung >PHP-Tutorial >Zusammenfassung mehrerer Anwendungsbeispiele für anonyme PHP-Funktionen

Zusammenfassung mehrerer Anwendungsbeispiele für anonyme PHP-Funktionen

伊谢尔伦
伊谢尔伦Original
2017-07-01 13:10:392074Durchsuche

Unwissentlich habe ich herausgefunden, dass PHP in Version 5.5 veröffentlicht wurde und ich PHP5.2 verwendet habe, wodurch ich wie ein junger Mann aus den Bergen aussehe, rustikal und rückständig. Nachdem ich mich an die Verwendung von Verschlüssen in Javascript gewöhnt hatte, interessierte ich mich plötzlich für PHP-Verschlüsse.

Also habe ich eine WAMP-integrierte Entwicklungsumgebung online heruntergeladen, nämlich die PHP5.3-Version (PHP5.3 hat mit der Einführung der Schließungsfunktion begonnen). Ich muss sagen, dass WAMP wirklich bequem zu installieren ist verwenden. . Nach einer einfachen Konfiguration können wir loslegen.

Anonyme Funktion
Wenn es um Abschlüsse geht, muss man an anonyme Funktionen, auch Abschlussfunktionen (Closures) genannt, denken, die aussehen Wie bei PHP-Verschlüssen hängt die Implementierung hauptsächlich davon ab. Die Deklaration einer anonymen Funktion sieht folgendermaßen aus:

Der Code lautet wie folgt:

$func = function() {
}; //带结束符


Wie Sie sehen können, hat die anonyme Funktion keinen Namen, also wenn Sie Wenn Sie es verwenden möchten, müssen Sie eine Variable zurückgeben. Anonyme Funktionen können auch Parameter wie gewöhnliche Funktionen deklarieren, und die aufrufende Methode ist ebenfalls dieselbe:

Der Code lautet wie folgt:

$func = function( $param ) 
{    
echo $param;
};
$func( 'some string' );
//输出://some string

Übrigens, bevor PHP eingeführt wird Für Schließungen gibt es auch eine Funktion, die anonyme Funktionen erstellen kann: Funktion erstellen, aber die Codelogik kann nur als Zeichenfolge geschrieben werden, was sehr undurchsichtig und schwer zu pflegen aussieht und daher nur von wenigen Menschen verwendet wird.

Abschluss implementieren
Übergeben Sie anonyme Funktionen als Parameter in gewöhnlichen Funktionen und können auch zurückgegeben werden. Dies implementiert einen einfachen Verschluss.

Im Folgenden finden Sie drei Beispiele

Der Code lautet wie folgt:

//例一
//在函数里定义一个匿名函数,并且调用它
function printStr() {
    $func = function( $str ) {
        echo $str;
    };
    $func( 'some string' );
}
printStr();
 
//例二
//在函数中把匿名函数返回,并且调用它
function getPrintStrFunc() {
    $func = function( $str ) {
        echo $str;
    };
    return $func;
}
$printStrFunc = getPrintStrFunc();
$printStrFunc( 'some string' );
 

//例三
//把匿名函数当做参数传递,并且调用它
function callFunc( $func ) {
    $func( 'some string' );
}
$printStrFunc = function( $str ) {
    echo $str;
};
callFunc( $printStrFunc );
//也可以直接将匿名函数进行传递。如果你了解js,这种写法可能会很熟悉
callFunc( function( $str ) {
    echo $str;
} );


Schlüsselwörter zum Verbinden von Abschlüssen und externen Variablen: Der USE
-Abschluss kann einige Variablen und Werte im Kontext des Codeblocks speichern. Standardmäßig können anonyme Funktionen in PHP nicht die Kontextvariablen des Codeblocks aufrufen, in dem sie sich befinden, sondern müssen das Schlüsselwort use verwenden.

Schauen wir uns ein weiteres Beispiel an:

Der Code lautet wie folgt:

function getMoney() {
    $rmb = 1;
    $dollar = 6;
    $func = function() use ( $rmb ) {
        echo $rmb;
        echo $dollar;
    };
    $func();
}
getMoney();
//输出:
//1
//报错,找不到dorllar变量

Wie Sie sehen können, wird Dollar in der Verwendung nicht deklariert Schlüsselwort, in dieser anonymen Funktion Es kann nicht im Inneren abgerufen werden, daher sollten wir diesem Problem während der Entwicklung Aufmerksamkeit schenken.

Einige Leute fragen sich vielleicht, ob es möglich ist, die Kontextvariablen in einer anonymen Funktion zu ändern, aber ich habe festgestellt, dass dies nicht möglich ist:

Der Code lautet wie folgt :

function getMoney() {
    $rmb = 1;
    $func = function() use ( $rmb ) {
        echo $rmb;
        //把$rmb的值加1
        $rmb++;
    };
    $func();
    echo $rmb;
}
getMoney();
//输出:
//1
//1

Ah, es stellt sich heraus, dass sich die Verwendung nur auf eine Kopie der Variablen bezieht. Aber ich möchte einen vollständigen Verweis auf die Variable, keine Kopie.

Um diesen Effekt zu erzielen, fügen Sie einfach ein &-Symbol vor der Variablen hinzu:

Der Code lautet wie folgt:

function getMoney() {
    $rmb = 1;
    $func = function() use ( &$rmb ) {
        echo $rmb;
        //把$rmb的值加1
        $rmb++;
    };
    $func();
    echo $rmb;
}
getMoney();
//输出:
//1
//2


Okay, das So kann die anonyme Funktion auf die Kontextvariablen verweisen. Wenn die anonyme Funktion an die Außenwelt zurückgegeben wird, speichert die anonyme Funktion die durch die Verwendung referenzierten Variablen, die Außenwelt kann diese Variablen jedoch nicht abrufen. Auf diese Weise ist das Konzept des „Schließens“ möglicherweise klarer.

Ändern Sie das obige Beispiel entsprechend der Beschreibung:

Der Code lautet wie folgt:

function getMoneyFunc() {
    $rmb = 1;
    $func = function() use ( &$rmb ) {
        echo $rmb;
        //把$rmb的值加1
        $rmb++;
    };
    return $func;
}
$getMoney = getMoneyFunc();
$getMoney();
$getMoney();
$getMoney();
//输出:
//1
//2
//3

Zusammenfassung
Merkmale von PHP-Abschlüssen Es ist keine große Überraschung, dass durch die Verwendung von CLASS ähnliche oder sogar leistungsfähigere Funktionen erreicht werden können. Wir können uns nur auf die Verbesserung der Schließungsunterstützung von PHP freuen in der Zukunft. Allerdings sind anonyme Funktionen immer noch sehr nützlich. Wenn Sie beispielsweise Funktionen wie preg_replace_callback verwenden, ist es nicht erforderlich, die Callback-Funktion extern zu deklarieren.

Das obige ist der detaillierte Inhalt vonZusammenfassung mehrerer Anwendungsbeispiele für anonyme PHP-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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