suchen
HeimBackend-EntwicklungPHP-TutorialWandler in PHP haben einfach gemacht

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.

Transducers in PHP Made Easy

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);
    }
}

// 示例数据
$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);
    }
}

// 示例数据
$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!

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
Arbeiten mit Flash -Sitzungsdaten in LaravelArbeiten mit Flash -Sitzungsdaten in LaravelMar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsCurl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsMar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -TestsVereinfachte HTTP -Reaktion verspottet in Laravel -TestsMar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

So registrieren und verwenden Sie Laravel -DienstleisterSo registrieren und verwenden Sie Laravel -DienstleisterMar 07, 2025 am 01:18 AM

Der Service -Container und die Dienstleister von Laravel sind für seine Architektur von grundlegender Bedeutung. In diesem Artikel werden Servicecontainer untersucht, Details für die Erstellung, Registrierung, Registrierung und die praktische Nutzung mit Beispielen mit Beispielen untersucht. Wir beginnen mit einem Ove

12 Beste PHP -Chat -Skripte auf Codecanyon12 Beste PHP -Chat -Skripte auf CodecanyonMar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

PHP -Protokollierung: Best Practices für die PHP -ProtokollanalysePHP -Protokollierung: Best Practices für die PHP -ProtokollanalyseMar 10, 2025 pm 02:32 PM

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

Erklären Sie das Konzept der späten statischen Bindung in PHP.Erklären Sie das Konzept der späten statischen Bindung in PHP.Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu.Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu.Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

See all articles

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool