eingehende PHP-funktionelle Programmierung: Erforschung von Wandler
Sie haben vielleicht von funktionalen Programmier- und erweiterten Funktionen geh?rt, kennen Sie aber Wandler? In diesem Artikel werden Sie dieses leistungsstarke Datenkonvertierungsinstrument untersucht.
Kernpunkte:
- Wandler stammen aus Clojure und portiert von Michael Dowling auf PHP, um wiederverwendbare Algorithmus -Transformationen aufzubauen. Dies sind Funktionen, die eine Reduktionsfunktion akzeptieren und eine andere Reduktionsfunktion zurückgeben. Das Paket von
- PHP -Wandler erm?glicht es, Daten auf verschiedene Weise umzuwandeln, z. Transversekte k?nnen zu einem einzelnen Wandler kombiniert werden.
- Die Reduktionsfunktion im Wandler erh?lt einen Wert als Parameter und gibt ein Array von Reduktionsfunktionen zurück, die drei Elemente enthalten: "Init" (init), "Ergebnis" (Endergebnis) und "Schritt" (Reduzierung) Logik).
- Der Vorteil der Wandler besteht darin, dass der Datenkonvertierungsprozess von der tats?chlichen Datenquelle getrennt wird, wodurch der Code modularer und einfacher zu warten ist. Sie erm?glichen die Erstellung wiederverwendbarer Softwarekomponenten, die in jeder Datenquelle verwendet werden k?nnen. Aufgrund ihrer funktionellen Programmierwurzeln sind sie jedoch m?glicherweise komplexer als herk?mmliche PHP -Funktionen.
Transducers Definition
Um Wandler zu verstehen, müssen Sie zuerst Reduzierer verstehen. Zitieren reichen Hickey:
Eine Reduktionsfunktion ist genau die Art der Funktion, die Sie an
reduce
übergeben - sie empf?ngt das Ergebnis bisher und eine neue Eingabe und gibt das n?chste bisherige Ergebnis zurück.
Ein Wandler ist eine Funktion, die eine Reduktionsfunktion empf?ngt und eine andere Reduktionsfunktion zurückgibt.
Wandler wurden ursprünglich von Rich Hickey in Clojure eingeführt und von Michael Dowling auf PHP portiert. Wandler sind eine starke M?glichkeit, algorithmische Transformationen aufzubauen, die in verschiedenen Situationen wiederverwendet werden k?nnen. In diesem Artikel wird seine Verwendung anhand einer Reihe praktischer Beispiele untersucht.
Beispiel
Bevor Sie fortfahren, müssen wir das Paket des Wandlers über den Komponisten installieren.
composer require mtdowling/transducers
Wir werden eine einfache Benutzerklasse für das folgende Beispiel verwenden.
class User { public $id; public $name; public $age; public function __construct($id, $name, $age) { $this->id = $id; $this->name = $name; $this->age = $age; } public function __toString() { return sprintf("\n%d - %s - %d", $this->id, $this->name, $this->age); } } // 示例數(shù)據(jù) $data = [ new User(1, "younes", 24), new User(2, "youssef", 26), new User(3, "hamza", 25), new User(4, "ismail", 17), ];
use Transducers as t; $uppercase = t\map(function($user) { return new User($user->id, ucfirst($user->name), $user->age); }); $result = t\xform($data, $uppercase); var_dump($result);Die Funktion
map
?hnelt der array_map
-Funktion von PHP: Wir übergeben eine aufrufbare Funktion, die in diesem Fall den Initial des Benutzernamens profitiert.
Wir verwenden die Funktion xform
, um unseren uppercase
-Stransducer anzuwenden. Es dauert unsere Daten als erster Parameter und den Wandler als zweiter Parameter.
// 輸出 array(4) { [0]=> object(User)#14 (3) { ["id"]=> int(1) ["name"]=> string(6) "Younes" ["age"]=> int(24) } [1]=> object(User)#15 (3) { ["id"]=> int(2) ["name"]=> string(7) "Youssef" ["age"]=> int(26) } [2]=> object(User)#16 (3) { ["id"]=> int(3) ["name"]=> string(5) "Hamza" ["age"]=> int(25) } [3]=> object(User)#17 (3) { ["id"]=> int(4) ["name"]=> string(6) "Ismail" ["age"]=> int(17) } }
xform
Gibt einen Wert desselben Typs wie der Datenparameter zurück (in diesem Fall ein Array). Wenn Sie streng ein Array ausgeben müssen, k?nnen wir auch to_array
verwenden.
// ... $result = t\to_array($data, $uppercase); // ...
Wir k?nnen auch to_string
verwenden, um die Ausgabe in eine Zeichenfolge umzuwandeln, oder into($target, $coll, callable $xf)
zum Umwandeln der Ausgabe in einen bestimmten Typ. Weitere Informationen finden Sie in der Dokumentation.
composer require mtdowling/transducers
class User { public $id; public $name; public $age; public function __construct($id, $name, $age) { $this->id = $id; $this->name = $name; $this->age = $age; } public function __toString() { return sprintf("\n%d - %s - %d", $this->id, $this->name, $this->age); } } // 示例數(shù)據(jù) $data = [ new User(1, "younes", 24), new User(2, "youssef", 26), new User(3, "hamza", 25), new User(4, "ismail", 17), ];
Das Beste an den Wandlern ist, dass wir mehrere Conversions zu einem Wandler kombinieren k?nnen. Lassen Sie uns beispielsweise den ersten Brief des Benutzernamens nutzen und den Minderj?hrigen l?schen.
use Transducers as t; $uppercase = t\map(function($user) { return new User($user->id, ucfirst($user->name), $user->age); }); $result = t\xform($data, $uppercase); var_dump($result);Die Funktion
filter
?hnelt der array_filter
-Funktion von PHP. Die comp
-Funktion erstellt einen Wandler aus der Wandlerliste, in diesem Fall uppercase
(mit map
) und removeMinors
(mit filter
).
// 輸出 array(4) { [0]=> object(User)#14 (3) { ["id"]=> int(1) ["name"]=> string(6) "Younes" ["age"]=> int(24) } [1]=> object(User)#15 (3) { ["id"]=> int(2) ["name"]=> string(7) "Youssef" ["age"]=> int(26) } [2]=> object(User)#16 (3) { ["id"]=> int(3) ["name"]=> string(5) "Hamza" ["age"]=> int(25) } [3]=> object(User)#17 (3) { ["id"]=> int(4) ["name"]=> string(6) "Ismail" ["age"]=> int(17) } }
Jetzt haben wir eine wiederverwendbare Wandlerkombination, die wir jederzeit verwenden k?nnen, um Daten basierend auf diesem Standard zu reduzieren. überprüfen Sie die Dokumentation für eine Liste der verfügbaren Reduktionsfunktionen.
erstellen Wandler
Die Reduktionsfunktion empf?ngt einen Wert als Parameter und gibt ein Array von Reduktionsfunktionen zurück, die drei Elemente enthalten müssen:
-
init
: Funktion, die den Anfangswert des Wandlers zurückgibt. Wenn kein Anfangswert bereitgestellt wird, wird er nur beim ersten Anruf aufgerufen. -
result
:result
Funktion wird verwendet, um das Endergebnis aus dem Anrufstapel zu erstellen. -
step
: Hier schreiben Sie die Reduktionslogik - Sie k?nnen sie null oder mehrmals gem?? Ihrer Reduktionslogik nennen.
Dies wird ohne den tats?chlichen Code sehr verwirrend. Nehmen wir also die Funktion take
als Beispiel. Es erh?lt N -Elemente von oben im Datenarray.
// ... $result = t\to_array($data, $uppercase); // ...
use Transducers as t; $uppercase = t\map(function($user) { return new User($user->id, ucfirst($user->name), $user->age); }); $result = t\to_string($data, $uppercase); var_dump($result);
Folgendes ist der Quellcode der Funktionsreduzierungsfunktion take
.
// 輸出 string(64) " 1 - Younes - 24 2 - Youssef - 26 3 - Hamza - 25 4 - Ismail - 17"Die Funktion
take
wird mehrmals mit result
und input
Parametern aufgerufen. Jedes Mal, wenn es aufgerufen wird, verringert es die remaining
Variable und testet, ob es weniger als Null ist. In diesem Fall geben wir eine Reduced
-Objektinstanz zurück, die einen Stopppunkt darstellt.
Unser Beispiel für die Funktionsübertragerfunktion entfernen leere Elemente aus den Daten. Unter Verwendung der vorherigen Erl?uterung, wie der Wandler funktioniert, k?nnen wir auf die $input
-Variable zugreifen und entscheiden, ob Sie den n?chsten step
Rückruf aufrufen oder einfach den Wert zurückgeben.
$uppercase = t\map(function($user) { return new User($user->id, ucfirst($user->name), $user->age); }); $removeMinors = t\filter(function($user) { return $user->age >= 18; }); $comp = t\comp( $uppercase, $removeMinors ); $result = t\to_string($data, $comp); var_dump($result);
Wir k?nnen dies testen, indem wir unserer $data
-Variablen einige leere Elemente hinzufügen.
// 輸出 string(48) " 1 - Younes - 24 2 - Youssef - 26 3 - Hamza - 25"
// .... $comp = t\comp( $uppercase, $removeMinors, t\take(2) ); $result = t\to_string($data, $comp); var_dump($result);
Schlussfolgerung
In diesem Artikel verstehen wir einen neuen Aspekt der funktionalen Programmierwelt, die als Wandler bezeichnet werden. Wir überprüfen den Zweck der Wandler, auch wenn die Datenkonvertierung einfacher ist. Wir haben auch einige Beispiele überprüft, um den Wert von Wandlern besser zu demonstrieren. Sie haben jetzt ein neues Tool in Ihrer Entwickler -Toolbox oder haben zumindest ein besseres Verst?ndnis für das Konzept des Wandlers.
Wenn Sie Fragen zu Wandler haben, k?nnen Sie es unten posten!
FAQs über Wandler in PHP
Was ist das grundlegende Konzept der Wandler in PHP?
Wandler in PHP sind eine Datenverarbeitungstechnologie, mit der Sie komponierbare und wiederverwendbare Softwarekomponenten erstellen k?nnen. Es handelt sich im Wesentlichen um Funktionen, die einen Reduzierer akzeptieren und einen neuen Reduzierer zurückgeben. Dieses Konzept wird von Clojure und JavaScript entlehnt und hat sich an PHP angepasst. Mit den Wandlern k?nnen Sie den Datenkonvertierungsprozess von der tats?chlichen Datenquelle trennen, wodurch Ihr Code modularer und einfacher zu verwalten ist.
Wie unterscheiden sich die Wandler von herk?mmlichen PHP -Funktionen?
herk?mmliche PHP -Funktionen kombinieren normalerweise den Prozess des Erhaltens und Konvertierens von Daten, wodurch der Code schwierig ist, die Wartung und Wiederverwendung zu machen. Wandler dagegen trennen die beiden Prozesse. Dies bedeutet, dass Sie einen Wandler erstellen k?nnen, der Daten auf eine bestimmte Weise konvertiert und ihn dann mit jeder Datenquelle verwenden, um Ihren Code flexibler und wiederverwendbarer zu machen.
K?nnen Sie ein Beispiel für den Wandler in PHP angeben?
Betrachten wir natürlich ein einfaches Beispiel. Angenommen, Sie haben eine Reihe von Zahlen und m?chten jeder Zahl 1 hinzufügen. Sie k?nnen einen Wandler erstellen, der dies tut:
composer require mtdowling/transducers
Sie k?nnen diesen Wandler dann mit jeder Reduktionsfunktion und jeder Datenquelle verwenden.
Wie verwendet ich Wandler mit unterschiedlichen Datenquellen?
Wandler sind so konzipiert, dass sie mit jeder Datenquelle verwendet werden. Dies liegt daran, dass sie auf der Ebene der einzelnen Datenelemente und nicht auf der gesamten Datenquellenebene ausgeführt werden. Daher k?nnen Sie Wandler mit Arrays, Datenbankabfrageergebnissen, Datenstr?men aus Netzwerkverbindungen usw. verwenden. Die einzige Anforderung ist, dass Ihre Datenquelle in der Lage sein muss, mit der Reduktionsfunktion zu arbeiten.
Was sind die Vorteile der Verwendung von Wandler in PHP?
Wandler bieten viele Vorteile. Sie erm?glichen es Ihnen, den Datenkonvertierungsprozess von der tats?chlichen Datenquelle zu trennen, sodass Ihr Code modularer und einfacher zu verwalten ist. Sie erm?glichen es Ihnen auch, wiederverwendbare Softwarekomponenten zu erstellen, die in jeder Datenquelle verwendet werden k?nnen. Da die Wandler mit einem einzelnen Datenelement arbeiten, sind sie m?glicherweise effizienter als herk?mmliche PHP -Funktionen, wenn sie mit gro?en Datens?tzen zu tun haben.
Was sind die Nachteile der Verwendung von Wandlern in PHP?
W?hrend Wandler viele Vorteile bieten, sind sie m?glicherweise auch komplexer als herk?mmliche PHP -Funktionen. Dies liegt daran, dass sie die Konzepte der funktionalen Programmierung beinhalten, die einigen PHP -Entwicklern m?glicherweise nicht bekannt sind. Sobald Sie jedoch verstanden haben, wie Wandler funktionieren, k?nnen sie ein leistungsstarkes Werkzeug zum Schreiben von sauberem, effizientem und wiederverwendbarem Code sein.
K?nnen Wandler mit PHP -Frameworks verwendet werden?
Ja, Wandler k?nnen mit jedem PHP -Framework verwendet werden. Sie sind eine allgemeine Datenverarbeitungstechnologie, die nicht von bestimmten Rahmenfunktionen abh?ngt. Einige Frameworks bieten jedoch m?glicherweise ihre eigenen Versorgungsunternehmen für den Umgang mit Wandlern, die sie erleichtern k?nnen.
Wie kann man mehr über Wandler in PHP erfahren?
Es stehen viele Ressourcen zur Verfügung, um Wandler in PHP zu lernen. Sie k?nnen zun?chst Online -Artikel und Tutorials wie Artikel auf SitePoint lesen. Es gibt auch Bücher und Online -Kurse, die das Thema ausführlicher abdecken. Schlie?lich k?nnen Sie versuchen, Ihre eigenen Wandler zu schreiben und sie in Ihrem PHP -Projekt zu verwenden.
Werden Wandler in anderen Programmiersprachen verwendet?
Ja, das Konzept der Wandler stammt aus der Clojure -Programmiersprache und wurde seitdem von mehreren anderen Sprachen übernommen, einschlie?lich JavaScript und PHP. Jede Sprache implementiert Wandler auf ihre eigene Weise, aber die grundlegenden Konzepte sind gleich.
Kann ich Wandler mit PHP-integrierten Array-Funktionen verwenden?
Ja, Sie k?nnen Wandler mit integrierten Array-Funktionen von PHP verwenden. Denken Sie jedoch daran, dass diese Funktionen m?glicherweise nicht so effizient sind wie die Verwendung von Wandler, insbesondere wenn es sich um gro?e Arrays handelt. Dies liegt daran, dass die Array -Funktionen von PHP normalerweise neue Arrays erzeugen und der Wandler Daten konvertieren kann.
Das obige ist der detaillierte Inhalt vonWandler in PHP haben einfach gemacht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

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

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

In PHP k?nnen Sie quadratische Klammern oder lockige Klammern verwenden, um Zeichenfolgenspezifikationsspezifische Indexzeichen zu erhalten, aber quadratische Klammern werden empfohlen. Der Index startet von 0 und der Zugriff au?erhalb des Bereichs gibt einen Nullwert zurück und kann keinen Wert zugewiesen; MB_SUBSTR ist erforderlich, um Multi-Byte-Zeichen zu verarbeiten. Zum Beispiel: $ str = "Hallo"; echo $ str [0]; Ausgabe H; und chinesische Zeichen wie Mb_Substr ($ str, 1,1) müssen das richtige Ergebnis erzielen. In den tats?chlichen Anwendungen sollte die L?nge der Zeichenfolge vor dem Schleifen überprüft werden, dynamische Zeichenfolgen müssen für die Gültigkeit verifiziert werden, und mehrsprachige Projekte empfehlen, Multi-Byte-Sicherheitsfunktionen einheitlich zu verwenden.

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile
