Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Funktion hat der PHP-Abschluss?

Welche Funktion hat der PHP-Abschluss?

王林
王林nach vorne
2019-09-03 14:13:425528Durchsuche

Welche Funktion hat der PHP-Abschluss?

PHP-Verschlüsse unterscheiden sich von Verschlüssen in JS. In diesem Artikel werden PHP-Verschlüsse als Referenz erläutert.

Wenn wir über Abschlüsse sprechen, müssen wir erwähnen, dass PHP-Abschlüsse hauptsächlich durch anonyme Funktionen implementiert werden.

Anonyme Funktion

Deklaration:

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

Wie Sie sehen, hat die anonyme Funktion keinen Namen. Wenn Sie sie verwenden möchten, benötigen Sie um es an eine Variable zurückzugeben. Anonyme Funktionen können auch Parameter wie gewöhnliche Funktionen deklarieren, und die aufrufende Methode ist auch dieselbe:

1 $func = function( $param ) {
2     echo $param;
3 };$func( 'some string' );
4 //输出:
5 //some string

Übrigens gab es vor der Einführung von Schließungen durch PHP auch eine Funktion, die anonyme Funktionen erstellen konnte: Funktion erstellen, aber Die Codelogik besteht nur aus Es kann als Zeichenfolge geschrieben werden, was unklar 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.

Beispiel:

//例一
//在函数里定义一个匿名函数,并且调用它
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üsselwort zum Verbinden von Abschluss und externen Variablen: USE

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

Abschluss kann einige Variablen und Werte im Kontext des Codeblocks speichern, in dem er enthalten ist befindet. Standardmäßig können anonyme Funktionen in PHP keine Kontextvariablen in dem Codeblock aufrufen, in dem sie sich befinden, sondern müssen das Schlüsselwort use verwenden. Schauen wir uns ein weiteres Beispiel an:

Wie Sie sehen, ist Dollar nicht im Schlüsselwort use deklariert und kann in dieser anonymen Funktion nicht abgerufen werden. Daher sollten Sie bei der Entwicklung auf dieses Problem achten.
Manche Leute fragen sich vielleicht, ob es möglich ist, Kontextvariablen in einer anonymen Funktion zu ändern, aber ich habe festgestellt, dass dies nicht möglich ist:

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 bezieht variabel. 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:

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

Okay, damit die anonyme Funktion auf die Kontextvariable verweisen kann. 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.

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

Zusammenfassung
Die Eigenschaften von PHP-Verschlüssen sind nicht allzu überraschend. Tatsächlich können durch die Verwendung von CLASS ähnliche oder sogar leistungsfähigere Funktionen erreicht werden, die nicht mit js-Verschlüssen verglichen werden können . Wir können uns nur auf Verbesserungen in der Schließungsunterstützung von PHP in der Zukunft freuen. Allerdings sind anonyme Funktionen immer noch sehr nützlich, wenn Sie beispielsweise Funktionen wie preg_replace_callback verwenden, müssen Sie keine Callback-Funktion extern deklarieren.

Für weitere verwandte Fragen besuchen Sie bitte die chinesische PHP-Website: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWelche Funktion hat der PHP-Abschluss?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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