Was sind PHP-Verschlüsse? Ausführliche Erläuterung der Beispiele für die Verwendung von Schließungen

伊谢尔伦
Freigeben: 2023-03-12 09:06:01
Original
3088 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich PHP detaillierte Erläuterungen zu Schließungen und zugehörige Informationen zu Beispielcodes vor. Freunde in Not können sich auf

Schließungen und anonyme Funktionen beziehen PHP5.3.0.

Ein Abschluss bezieht sich auf eine Funktion, die beim Erstellen den umgebenden Zustand kapselt. Auch wenn die Umgebung, in der sich der Verschluss befindet, nicht mehr existiert, bleibt der im Verschluss eingekapselte Zustand bestehen.

Theoretisch sind Schließungen und anonyme Funktionen unterschiedliche Konzepte. Aber PHP behandelt es als dasselbe Konzept.

Eigentlich sind Abschlüsse und anonyme Funktionen als Funktionen getarnte Objekte. Sie sind Instanzen der Closure-Klasse.

Abschlüsse sind wie Strings und Ganzzahlen erstklassige Werttypen.

Erstellen Sie einen Abschluss

<?php
$clousre = function ($name) {
return &#39;Hello &#39; . $name;
};
echo $closure(&#39;nesfo&#39;);
Nach dem Login kopieren

Der Grund, warum wir die Variable $closure aufrufen können, liegt darin, dass der Wert dieser Variablen ein Abschluss ist und der Schließung Das Objekt implementiert die invoke()magische Methode. Solange nach dem Variablennamen () steht, findet PHP die Methode invoke() und ruft sie auf. PHP-Abschlüsse werden normalerweise als Rückrufe von Funktionen verwendet. Die Methoden array_map() und preg_replace_callback() verwenden alle die Callback-Funktion. Dies ist der beste Zeitpunkt, um Abschlüsse zu verwenden!

Zum Beispiel:

<?php
$numbersPlusOne = array_map(function ($number) {
return $number + 1;
}, [1, 2, 3]);
print_r($numbersPlusOne);
Nach dem Login kopieren

Erhalten Sie das Ergebnis:

[2, 3, 4]

in Schließung Vorher Seit seiner Einführung konnten Sie benannte Funktionen nur einzeln erstellen und diese Funktion dann namentlich referenzieren. Dadurch wird die Codeausführung etwas langsamer und die Implementierung des Rückrufs wird vom Nutzungsszenario isoliert.

<?php
function incrementNum ($number) {
return $number + 1;
}
$numbersPlusOne = array_map(&#39;incrementNum&#39;, [1, 2, 3]);
print_r($numbersPlusOne);
Nach dem Login kopieren

Status anhängen

Anonyme Funktionen können nicht nur als Rückrufe verwendet werden, sondern können auch den Status für PHP anhängen und kapseln.

In PHP müssen Sie die bindTo()-Methode des Abschlussobjekts manuell aufrufen oder das Schlüsselwort use verwenden, um den Status an den PHP-Abschluss anzuhängen.

<?php
function enclosePerson ($name) {
return function ($doCommand) use ($name) {
return $name . &#39;, &#39; . $doCommand;
}
}
$clay = enclosePerson(&#39;Clay&#39;);
echo $clay(&#39;get me sweet tea!&#39;);
Nach dem Login kopieren

Erhalten Sie das Ergebnis:

„Clay, hol mir süßen Tee!“

PHP-Verschlüsse sind Objekte, jede Verschlussinstanz Sie können Verwenden Sie das Schlüsselwort $this, um den internen Status des Abschlusses abzurufen. Der Standardstatus des Abschlussobjekts ist nutzlos, nur die Methoden invoke () und bindTo.

Wir können die bindTo()-Methode verwenden, um den internen Status des Closure-Objekts an andere Objekte zu binden.

Der zweite Parameter der bindTo()-Methode: Ihre Funktion besteht darin, die PHP-Klasse anzugeben, zu der das Objekt des Bindungsabschlusses gehört. Daher kann ein Abschluss auf geschützte und private Mitglieder des Objekts zugreifen, an das der Abschluss gebunden ist.

PHP-Frameworks verwenden häufig die bindTo()-Methode, um Routing-URLs anonymen Rückruffunktionen zuzuordnen. Auf diese Weise können Sie das Schlüsselwort $this verwenden, um in dieser anonymen Funktion auf wichtige Anwendungsobjekte zu verweisen.

Verwenden Sie die bindTo()-Methode, um den Abschlussstatus anzuhängen

<?php
class App
{
protected $routes = [];
protected $responseStatus = &#39;200 OK&#39;;
protected $responseContentType = &#39;text/html&#39;;
protected $responseBody = &#39;Hello world&#39;;
public function addRoute($routePath, $routeCallback){
$this->routes[$routePath] = $routeCallback->bindTo($this, CLASS);
}
public function dispatch($currentPath){
foreach($this->routes as $routePath => $callback){
if ($routePath === $currentPath) {
$callback();
}
}
header(&#39;HTTP/1.1&#39; . $this->responseStatus);
header(&#39;Content-type: &#39; . $this->responseContentType);
header(&#39;Content-length&#39; . mb_strlen($this->responseBody));
echo $this->responseBody;
}
}
Nach dem Login kopieren
<?php
$app = new App();
$app->addRoute(&#39;/user/nesfo&#39;, function () {
$this->responseContentType = &#39;application/json; charset=utf8&#39;;
$this->responseBody = &#39;{"name": "nesfo"}&#39;;
});
$app->dispatch(&#39;/user/nesfo&#39;);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas sind PHP-Verschlüsse? Ausführliche Erläuterung der Beispiele für die Verwendung von Schließungen. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!