Heim  >  Artikel  >  Backend-Entwicklung  >  Die Rolle anonymer PHP-Funktionen und -Abschlüsse

Die Rolle anonymer PHP-Funktionen und -Abschlüsse

墨辰丷
墨辰丷Original
2018-06-05 09:34:103135Durchsuche

In diesem Artikel werden hauptsächlich die Funktionen und Schließungen von PHP vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

Der Code lautet wie folgt:

$func = function() {
   
}; //带结束符
可以看到,匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量。匿名函数也像普通函数一样可以声明参数,调用方法也相同:
$func = function( $param ) {
  echo $param;
};
 
$func( 'some string' );
 
//输出:
//some string

1. Implementieren Sie den Abschluss

Setzen Sie den Anonyme Funktion im Normalfall Es wird als Parameter in der Funktion übergeben und kann auch zurückgegeben werden. Dies implementiert einen einfachen Verschluss.

//例一
//在函数里定义一个匿名函数,并且调用它
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;
} );

2. Schlüsselwörter zum Verbinden von Abschlüssen und externen Variablen: VERWENDEN
Abschlüsse können einige Variablen und Werte im Kontext des Codeblocks speichern, in dem sie sich befinden. 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.

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

Wie Sie sehen können, 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.

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:

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

Es stellt sich heraus, dass use nur eine Kopie von ist die Variable. Das ist alles. 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.

Ändern Sie das obige Beispiel gemäß der Beschreibung:

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

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass dies möglich ist Helfen Sie allen beim Lernen. Hilft.

Verwandte Empfehlungen:

Detaillierte Erläuterung der Verwendung und Beispiele der Cookie-Informationssicherheit für die PHP-Benutzeranmeldung

Die Implementierungsmethode von PHP, die einen 13-stelligen Zeitstempel zurückgibt

Detaillierte Erläuterung der Methode und Beispiele für PHP, der sein eigenes Java-Programm aufruft

Das obige ist der detaillierte Inhalt vonDie Rolle anonymer PHP-Funktionen und -Abschlüsse. 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