Heim Backend-Entwicklung PHP-Tutorial Beschreibung der praktischen Anwendung von PHP-Abschlussfunktionen

Beschreibung der praktischen Anwendung von PHP-Abschlussfunktionen

Jul 01, 2017 pm 01:12 PM
php 应用 veranschaulichen

Die neue Version von PHP folgt vielen neuen Funktionen, eine der auffälligeren Funktionen ist die Unterstützung für Schließungen. Können wir also in Zukunft sehr coolen Code schreiben wie die Leute, die Ruby, Javascript und andere „High-Tech-Sprachen“ schreiben?

Nun, in den meisten Fällen ist es möglich, aber es gibt immer noch einige Aspekte, die sehr beunruhigend sind.
Viele mehrere Sprachen bieten sehr elegante und schöne Methoden zum Betrieb von Arrays. Im folgenden Beispiel wird die von PHP5.3 und anderen Sprachen bereitgestellte Abschlussfunktion verwendet, um zu zeigen, wie das iterierte Array „objektiv“ betrieben wird.
Übersetzungshinweis: Der Autor des Originalartikels ist relativ inkompetent. Ich kenne die Sprache Groovy und Scala nicht, daher werde ich hier die Javascript-Implementierung hinzufügen.
Bevor ich anfange, möchte ich erklären, dass dieses Beispiel nur der Veranschaulichung dient und andere Faktoren wie die Leistung nicht berücksichtigt.

„Umsehen“

Beginnen Sie mit einem einfachen Beispiel, mit dem folgenden Array:
$nums = array(10, 20, 30, 40 ); Es müssen Elemente gefunden werden, die größer als 15 im Array sind. Dann könnten wir, ohne den Abschluss zu berücksichtigen, so schreiben:
$res = array();foreach ($nums as $n) { if ($n > 15) { $res[] = $ n; Wenn die Sprache selbst Schließungsunterstützung hat, kann sie so geschrieben werden (Groovy-Sprache)
def res = nums.findAll { it > 15 } oder Scala-Sprache
val res = verwenden nums filter (_ > 15) Übersetzungshinweis: Für Javascript 1.6 lautet es wie folgt:
var res = nums.filter(function(c){return c > 15}); Da die Schleifenoperation abstrahiert wurde Sie sehen also, dass Groovy, Scala (und Javascript) alle sehr schön sind und in einer Zeile ausgeführt werden können.
Wenn Sie PHP5.3-Abschlüsse verwenden, können Sie dies natürlich auch tun
$res = array_filter($nums, function($v) { return $v > 15; } ) ;PHP verwendet dafür mehr Zeichen als Scala, aber es ist kürzer und einfacher zu lesen als das vorherige Beispiel.

Übrigens verwendet der obige PHP-Code tatsächlich die Lambda-Analyse und ist kein echter Abschluss. Dies steht nicht im Mittelpunkt unserer aktuellen Aufmerksamkeit. Ausführliche Informationen zu PHP-Abschlüssen und Lambda-Parsing finden Sie hier.
Bisher scheint es ziemlich gut zu sein, also erhöhen wir die Schwierigkeit des Problems: Finden Sie alle Elemente größer als 15, multiplizieren Sie sie dann mit 2 plus einem bestimmten Variablenwert im Bereich und geben Sie sie dann zurück.

Groovy-Implementierung:
def x = 1def res = nums .findAll { it > 15 } .collect { it * 2 + x }Scala-Implementierung:
val x = 1val res = nums filter (_ > 15) Map (_ * 2 + x) Übersetzungsanmerkung, Javascript-Implementierung:
var i = 1;var res = nums.filter(function(c){return c > 15}). function(c){return c * 2 + i}); und PHP:
$x = 1;$res = array_map( function($v) use ($x) { return $v * 2 + $x; }, array_filter( $nums, function($v) { return $v > 15; })); In Bezug auf die Codegröße scheint sich PHP von anderen Sprachen zu unterscheiden. Abgesehen von der wörtlichen Ästhetik des Codes gibt es ein zusätzliches Problem mit dem obigen PHP-Code.
Was ist beispielsweise, wenn Sie zum Vergleich Array-Schlüssel anstelle von Werten verwenden müssen? Ja, der obige Code kann nicht ausgeführt werden. Auch syntaktisch ist der obige Code sehr schwer zu lesen.

Zurück zur Natur, Sie müssen immer noch zur altmodischen Denkweise zurückkehren, um das Problem zu lösen:
$x = 1;$res = array();foreach ($nums as $n ) { if ($n > ; 15) { $res[] = $n * 2 + $x }} Puh, das sieht wieder ganz klar aus. Aber zu diesem Zeitpunkt sind Sie möglicherweise erneut verwirrt: „Warum herumspielen? Ist das nicht nur eine Array-Operation?“
Ja, das Beste kommt noch. Jetzt ist es an der Zeit, einige der erweiterten Funktionen von PHP ins Spiel zu bringen, um dieses „langweilige Problem“ zu lösen, das anscheinend zur Selbstverletzung neigt.

ArrayObject – eine Kapselung von Arrays
PHP verfügt über eine Standardbibliothek namens SPL, die eine Klasse namens ArrayObject enthält, die die Funktion bereitstellen kann, „Klassen wie Arrays zu betreiben“, wie z. B.
$res = new ArrayObject(array(10, 20, 30, 40));foreach ($res as $v) { echo "$vn";}ArrayObject ist eine integrierte Klasse, sodass Sie sie wie andere Klassen bedienen und kapseln können .

Arr – Zuckerüberzug

Da wir nun über die Funktionen von ArrayObject und Abschlüssen verfügen, können wir mit dem Versuch beginnen, es zu kapseln:
class Arr erweitert ArrayObject { static function make($array) { return new self($array); } function map($func) { $res = new self(); ($this as $k => $v) { $res[ $k ] = $func($k, $v); } return $res; } function filter($func) { $res = new self(); func($k, $v)) { $res[$k] = $v; } } return $res; }}Okay, alles ist fertig. Der umgeschriebene PHP-Code unten kann das oben genannte Problem lösen und sieht „fast“ syntaktisch aus:

$res = Arr::make($nums) ->filter(function($k, $v) { return $v > 15; }) ->map(function($k, $v) { return $ v * 2; });Wie unterscheidet sich der obige Code von der herkömmlichen Methode? Erstens können sie rekursive und Kettenaufrufe sein, sodass weitere ähnliche Operationen hinzugefügt werden können.

Gleichzeitig können die Schlüssel und Werte des Arrays jeweils über die beiden Parameter des Rückrufs manipuliert werden – $k entspricht dem Schlüssel und $v entspricht dem Wert. Dadurch können wir Schlüsselwerte in Abschlüssen verwenden, was mit der herkömmlichen PHP-Funktion array_filter nicht möglich ist.
Ein weiterer zusätzlicher Vorteil sind konsistentere API-Aufrufe. Bei herkömmlichen PHP-Funktionsoperationen kann ihr erster Parameter ein Abschluss, ein Array oder mehrere Arrays sein ... Wie auch immer, wer weiß?
Hier ist der vollständige Quellcode der Arr-Klasse, der auch andere nützliche Funktionen enthält (ähnlich wie Reduce und Walk). Tatsächlich ähnelt ihre Implementierung dem Code.

Spiel

Diese Frage ist eigentlich schwer zu beantworten – sie hängt von vielen Faktoren ab, wie zum Beispiel dem Kontext des Codes und dem Programmierer selbst. Als ich zum ersten Mal die Abschlussimplementierung von PHP sah, fühlte ich mich tatsächlich wie in die Java-Zeit vor langer Zeit zurückversetzt, als ich anfing, anonyme innere Klassen zum Implementieren von Abschlüssen zu verwenden. Obwohl dies möglich ist, scheint es natürlich überflüssig zu sein. An PHP-Abschlüssen ist nichts auszusetzen, aber ihre Implementierung und Syntax verwirren mich.
Andere Sprachen mit Abschlussfunktionen können Abschlüsse sehr bequem aufrufen und verfügen über eine elegante Syntax. Im obigen Beispiel würde die Verwendung einer herkömmlichen Schleife in Scala auch funktionieren, aber würden Sie es so schreiben? Auf der anderen Seite sagen einige Leute, dass das obige Problem auch mit PHP-Verschlüssen gelöst werden kann, aber würden Sie es im Allgemeinen so schreiben?
Es ist sicher, dass PHP-Schließungen in manchen Situationen ein scharfer Säbel sein können (z. B. verzögerte Ausführung und Ressourcenaufrufe), aber angesichts traditioneller Iterations- und Array-Operationen sind sie etwas schwierig. Lassen Sie sich nicht entmutigen, das Wichtigste ist, zu den Grundlagen zurückzukehren und kompatiblen, sauberen Code und APIs zu schreiben.

Fazit

Wie alle später hinzugefügten Syntaxfunktionen (erinnern Sie sich an die Generics-Funktion von Java damals? Und die PHP-OOP-Funktion früherer Jahre) erfordern sie alle Zeit einbrechen und sich schließlich stabilisieren. Da PHP5.3 und sogar PHP6 in Zukunft immer beliebter werden, glaube ich, dass intelligente Programmierer in naher Zukunft nach und nach immer mehr Techniken und Funktionen entdecken werden.
Gehen Sie zurück zum Titel am Anfang des Originalartikels und vergleichen Sie
$res = Arr::make($nums) ->filter(function($k, $v) { return $v > 15; }) - >map(function($k, $v) { return $v * 2; }); und
val res = nums filter (_ > 15) map (_ * 2). Letztlich handelt es sich nur um Grammatik. Im Wesentlichen lösen sie dasselbe Problem durch unterschiedliche Ansätze. Die Anwendungseigenschaften von Programmiersprachen sind unterschiedlich, daher ist es unmöglich zu vergleichen, welche besser und welche schlechter ist.
Abschließend finden Sie hier die Codebeispiele aus diesem Artikel. Ich glaube, Sie können weitere Einblicke in die Verwendung von PHP für die funktionale Iteration finden (natürlich nicht nur diese).


Das obige ist der detaillierte Inhalt vonBeschreibung der praktischen Anwendung von PHP-Abschlussfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles