Heim >Backend-Entwicklung >PHP-Tutorial >PHP Master | Funktionelle Programmierung in PHP

PHP Master | Funktionelle Programmierung in PHP

Joseph Gordon-Levitt
Joseph Gordon-LevittOriginal
2025-02-24 09:54:17371Durchsuche

PHP Master | Functional Programming in PHP

Viele Programmierer sprechen gerne über funktionale Programme, aber wenn Sie sie fragen, ob sie sie tatsächlich verwendet haben, werden die meisten Antworten "Nein" sein. Der Grund ist einfach: Wenn wir Anfänger im Programmieren haben, wird uns beigebracht, auf imperative Weise zu denken, nämlich Programmflussdiagramme und Schritte. Daher erklärt dieser Artikel einige wichtige Konzepte der funktionalen Programmierung und zum Schreiben von Funktionscode in PHP.

Schlüsselpunkte

  • funktionelle Programmierung behandelt Berechnungen als Bewertung mathematischer Funktionen und vermeidet Zustand und veränderliche Daten, wodurch Funktionen als erstklassige Bürger behandelt werden. Dies bedeutet, dass Funktionen wie Werte in der imperativen Programmierung verwendet werden können.
  • Schlüsselkonzepte der funktionalen Programmierung umfassen Invarianz (nach der Definition, der Wert einer Variablen kann nicht geändert werden), Rekursion (häufig aufgrund der Invarianz verwendet), reine Funktionen (Funktionen ohne Nebenwirkungen) und Funktionen höherer Ordnung (Funktionen, die die Funktionen haben kann verwendet werden, um Funktionen in eine Funktion höherer Ordnung umzuwandeln.
  • Die funktionale Programmierung ermöglicht einen einfacheren, lesbareren Code, um eine sichere Programmierung zu fördern, indem Status- und variable Daten vermieden werden. Es kann Ihnen auch helfen, sich auf das zu konzentrieren, was Sie erreichen möchten, und nicht auf zufällige Ereignisse im Managementprozess.
  • Trotz der Vorteile der funktionellen Programmierung ist seine Lernkurve für diejenigen, die imperativ geschult wurden, sehr steil. Einige der Vorteile, die mit funktionaler Programmierung verbunden sind, gelten traditionell nicht für PHP, da sie nicht als funktionale Programmiersprache konzipiert ist. Es ist möglicherweise auch nicht die effizienteste Art, Programme zu schreiben.

Wichtige Konzepte der funktionalen Programmierung

Wikipedia definiert die funktionelle Programmierung als "Programmierparadigma, das Berechnungen als Bewertung mathematischer Funktionen behandelt und Zustand und variable Daten vermeidet". Bei der funktionellen Programmierung werden Funktionen als erstklassige Bürger angesehen, während wir uns bei der imperativen Programmierung hauptsächlich auf Daten und die Schritte konzentrieren, um Daten zu ändern, um die erwarteten Ergebnisse zu erzielen. Wenn wir sagen, dass eine Funktion ein erstklassiger Bürger ist, bedeutet dies, dass wir Funktionen verwenden können, wie wir Werte in der imperativen Programmierung verwenden. Sie können als Parameter an eine Funktion übergeben, in einer anderen Funktion definiert oder sogar zurückgegeben werden. Mit anderen Worten, "eine Funktion ist ein Wert". Wir werden dies später noch einmal diskutieren, aber die funktionale Programmierung hat viele andere wichtige Konzepte. Um nur ein paar Beispiele zu nennen:

Invarianz

Invarianz bezieht sich auf das Verhalten, dass der Wert einer Variablen definiert ist, nicht geändert werden kann. Unterschiedliche Sprachen haben unterschiedliche Implementierungen.

Rekursion

Rekursion ist auch in der funktionellen Programmierung herausragend. Bei der imperativen Programmierung können wir, wenn wir Sätze oder Arrays manipulieren müssen, Schleifenstrukturen wie für und für und für die ITE durch jedes Element iterieren und temporäre Variablen verwenden, um den aktuellen Wert zu speichern. Dieser Ansatz ist jedoch bei der funktionellen Programmierung aufgrund von Invarianz nicht möglich. Rekursion ist die Antwort, da diese Buchhaltung implizit durch den Anrufstapel durchgeführt wird. Angenommen, wir möchten eine Funktion schreiben, um die Summe aller Elemente in einem Array zu finden (vergessen Sie die Existenz von Array_Sum () vorerst). Im funktionalen Stil werden wir schreiben:

<code class="language-php"><?php
function sum($array) {
    if (empty($array))
        return 0;
    else
        return $array[0] + sum(array_slice($array, 1));
}

$total = sum(array(1, 2, 3)); // 6
?></code>

Die leere Liste wird 0 zurückgegeben, was unser Grundzustand ist. Für ein Array, das mehrere Werte enthält, gibt es das Ergebnis der Zugabe des ersten Elements zur rekursiven Summe aller anderen Elemente zurück.

reine Funktionen und Referenztransparenz

Wenn eine Funktion den Wert ihres eigenen externen Objekts (z. B. globale oder statische Variablen) nicht ändert und keine E/A -Effekte hat (z. keine Nebenwirkungen haben. Solche Funktionen werden auch als reine Funktionen bezeichnet. Für einen bestimmten Parametersatz wird die Ausgabe der reinen Funktion immer gleich sein, was zu einer anderen Eigenschaft bezeichnet wird, die als Referenztransparenz bezeichnet wird. Wenn auf transparent verwiesen wird, können wir die Funktion durch ihren Wert ersetzen, ohne das Verhalten des Programms zu beeinflussen. Alle mathematischen Funktionen sind reine Funktionen, während Datumsfunktionen, Rand () usw. Nicht-Pure-Funktionen sind.

Fortgeschrittene Auftragsfunktionen

Die oben genannten Konzepte können in fast jeder Programmiersprache implementiert werden, aber erstklassige Bürgerfunktionen und Funktionen höherer Ordnung sind die beiden bekanntesten Merkmale der funktionalen Programmierung. Ich habe erklärt, dass eine erstklassige Bürgerfunktion bedeutet, dass eine Funktion als Wert behandelt werden kann. Eine Funktion höherer Ordnung ist eine Funktion, die eine Funktion als Parameter annehmen und eine Funktion als Ergebnis zurückgeben kann. Zwei wichtige Funktionen, die kürzlich hinzugefügt wurden, ermöglichen es uns, Funktionen höherer Ordnung in PHP zu schreiben: Lambda-Ausdrücke und -Clessures.

Lambda -Funktion

Die Lambda -Funktion (auch als anonyme Funktion bezeichnet) ist nur eine Funktion ohne Namen. Wenn wir eine anonyme Funktion definieren, wird ein Verweis auf die Funktion zurückgegeben, die für die spätere Verwendung in einer Variablen gespeichert ist. Wir verwenden diese Variable, um die Funktion bei Bedarf aufzurufen. Viele verschiedene Sprachen übernehmen dieses Konzept. Tatsächlich können Sie Lambda -Funktionen in Ihrer täglichen JavaScript -Programmierung verwenden und sie als Rückrufe für verschiedene Benutzerinteraktionen und AJAX -Anrufe verwenden.

<code class="language-javascript">$("#myButton").click(function () {
    // do something
});</code>

Dieser Code ist sehr einfach und leicht zu verstehen, was uns dazu bringen kann, seinen funktionalen Aspekt zu vergessen. PHP hat diese leistungsstarke Funktion in Version 5.3 eingeführt, mit der wir PHP -Code auf ähnliche Weise schreiben können:

<code class="language-php"><?php
$square = function ($arg) {
    return $arg * $arg;
};

$value = $square(2); // 4
?></code>

Wenn Sie über Funktionen sprechen, insbesondere über anonyme Funktionen, ist es wichtig zu verstehen, wie man mit dem variablen Umfang umgeht. Mit JavaScript können Sie beispielsweise in Lambdas auf extern abkopierte Variablen zugreifen, während PHP dies nicht tut. Lambda hat einen eigenen Umfang im Inneren, genau wie regelmäßige PHP -Funktionen.

Schließen

Manchmal möchten Sie sich möglicherweise auf Variablen im übergeordneten Bereich innerhalb der Funktion beziehen. Verschlüsse ähneln den Lambda -Funktionen, aber leicht unterschiedlich, und Sie können mit externen Teilen auf Variablen zugreifen. Wir können "Reach Out" verwenden und externe Variablen mithilfe von PHP -Verwendung von Keywords, das auch in PHP 5.3 eingeführt wurde, binden.

<code class="language-php"><?php
function sum($array) {
    if (empty($array))
        return 0;
    else
        return $array[0] + sum(array_slice($array, 1));
}

$total = sum(array(1, 2, 3)); // 6
?></code>

In diesem Fall verabschieden wir nicht jedes Mal, wenn die Funktion aufgerufen wird. Stattdessen definieren wir es extern und verwenden das Schlüsselwort verwenden, um es in der Funktion verfügbar zu machen.

Teilfunktionen und Currying

Einfach ausgedrückt, einige Funktionen sind Funktionen, die aus vorhandenen Funktionen erstellt wurden, und ihre Parameter werden teilweise angewendet. Sie müssen nur die verbleibenden Parameter übergeben, wenn Sie die erstellte Funktion aufrufen. Wir können Schließungen verwenden, um Teilfunktionen in PHP zu erstellen. Dies ist ein Beispiel, um das Volumen einer Box basierend auf Länge, Breite und Höhe zu finden. Alle Parameter sind optional;

<code class="language-javascript">$("#myButton").click(function () {
    // do something
});</code>

Alle Parameter sind optional. Überprüfen Sie zunächst, ob der Anrufer alle Parameter übergeben hat. In diesem Fall können wir direkt zum Volumen zurückkehren, indem wir Länge, Breite und Höhe multiplizieren. Wenn die Anzahl der Parameter geringer ist als die Parameter, wird eine neue Funktion zurückgegeben, um das Volumen des angegebenen Parameters vorein zu ermitteln. Nehmen wir nun an, wir suchen nach dem Volumen einer Box mit fester Länge (z. B. 10). Dies kann leicht erfolgen, indem 10 als erster Parameter genommen werden, oder wir können eine Teilfunktion erstellen, indem wir 10 als erster Parameter übernehmen und dann nur die verbleibenden Werte anfordern.

<code class="language-php"><?php
$square = function ($arg) {
    return $arg * $arg;
};

$value = $square(2); // 4
?></code>

Currying ist ein spezieller Fall von Teilfunktionen, bei denen Sie eine Funktion konvertieren, die mehrere Parameter in mehrere Funktionen akzeptiert, die jeweils einen einzelnen Parameter akzeptieren. Ähnlich ähnlich wie f (x, y, z) zu f (x) (y) (z) (obwohl die PHP -Syntax keine solchen nisteten Funktionsaufrufe zulässt). Wenn Sie mehr lernen möchten, hat Timothy Boronczyk einen hervorragenden Artikel über das Currying mit tatsächlichen Beispielen geschrieben.

Profis und Nachteile

Die Funktionen der funktionalen Programmierung haben in PHP viele praktische Verwendungen. Beispielsweise wird die Lambda -Funktion bei der Verwendung von Rückruffunktionen häufig verwendet. Mit dem schlanken Framework können Sie beispielsweise die folgende Route definieren:

<code class="language-php"><?php
function sum($array) {
    if (empty($array))
        return 0;
    else
        return $array[0] + sum(array_slice($array, 1));
}

$total = sum(array(1, 2, 3)); // 6
?></code>

Slim ruft die Rückruffunktion auf, wenn die angeforderte URL mit dieser Route übereinstimmt. Vance Lucas hat zuvor einige Artikel über andere interessante Anwendungsfälle von Lambda -Funktionen geschrieben. Fördern Sie eine sichere Programmierung, indem Sie staatliche und variable Daten vermeiden. In der funktionalen Programmierung sollten Sie Funktionen schreiben, die nur eine Sache ausführen und keine Nebenwirkungen haben. Die Betonung dieses Paradigmas auf Modularität und Funktionseinfachheit kann es erleichtern, Ihr Programm auf der Grundlage verschiedener, kleiner Unterprogramme zu schließen. Funktionelle Programmierung kann Ihnen auch dabei helfen, Code zu schreiben, der sich auf das konzentriert, was Sie erreichen möchten, anstatt ausdrücklich zufällige Ereignisse im Prozess zu verwalten (vergleichen Sie die Rekursion mit der Verwaltung von Schleifenzählervariablen). Denken Sie jedoch daran, dass einige der Vorteile, die traditionell mit funktionaler Programmierung zusammenhängen, nicht für PHP gelten, da sie nicht als funktionale Programmiersprache konzipiert ist. Zum Beispiel sind Funktionen ohne Nebenwirkungen ideal für die parallele Verarbeitung, aber PHP -Skripte werden nicht so ausgeführt. Es ist auch nicht immer einfach, die Kosten für rekursive und faule Funktionen zu berechnen, und es kann aufgrund des internen Overheads schwerwiegende Leistungsprobleme geben. Manchmal ist es sinnvoller, Programme mit Variabilität zu schreiben, um die Effizienz zu verbessern. Der vielleicht größte Nachteil der funktionalen Programmierung ist, dass es eine sehr steile Lernkurve für diejenigen hat, die imperativ geschult wurden. Insgesamt macht die funktionale Programmierung Spaß, und das Lernen bietet Ihnen neue Tools, um über alte Probleme nachzudenken und Ihnen dabei zu helfen, als Programmierer zu wachsen. Es ist keine universelle Lösung, kann aber nach Bedarf auf sauberere und elegantere PHP -Code angewendet werden.

Zusammenfassung

funktionale Programmierung ist nicht nur ein Programmierparadigma. Wenn Sie funktionales Denken tun können, können Sie in fast jeder Sprache funktional programmieren. In diesem Artikel diskutieren wir die Grundlagen der funktionalen Programmierung mit den Funktionen von PHP, um Beispiele dafür zu schreiben und zu geben. Während die in diesem Artikel angegebenen Beispiele für Sie möglicherweise nicht praktisch sind, finden Sie viele Fälle, in denen funktionale Stile die Qualität des von Ihnen geschriebenen Code erheblich verbessern können. Versuchen Sie nach solchen Fällen, denken Sie funktional und haben Sie Spaß! Bilder aus Fotolien

Häufig gestellte Fragen zur funktionalen PHP -Programmierung

Was ist der Hauptunterschied zwischen funktionaler Programmierung und objektorientierter Programmierung in PHP?

funktionale Programmierung und objektorientierte Programmierung sind zwei verschiedene Paradigmen, die in PHP verwendet werden. Der Hauptunterschied ist, wie sie Status und Daten verwalten. In der funktionalen Programmierung sind Funktionen erstklassige Bürger und haben kein Staatskonzept. Dies bedeutet, dass die Funktion bei der gleichen Eingabe immer den gleichen Ausgang erzeugt. Die objektorientierte Programmierung hingegen dreht sich um Objekte und ihre Interaktionen, die den Zustand und ändern sich im Laufe der Zeit. Dies kann zu unterschiedlichen Ausgängen führen, auch wenn der Eingang gleich ist.

Wie fange ich mit PHP für funktionale Programmierung an?

Um die funktionale Programmierung mit PHP zu beginnen, müssen Sie grundlegende Konzepte wie reine Funktionen, Invarianz und Funktionen höherer Ordnung verstehen. Dann können Sie mit dem Schreiben von Funktionen beginnen, die den Zustand nicht ändern und keine Nebenwirkungen haben. PHP verfügt über integrierte Funktionen, die die funktionale Programmierung unterstützen, wie array_map, array_filter und array_reduce. Sie können auch Bibliotheken wie Laravel -Sammlungen verwenden, die reibungslose und bequeme Wrapper für die Verwendung von Datenarrays bieten.

Was sind die Vorteile der funktionalen Programmierung in PHP?

Die funktionale Programmierung in PHP ermöglicht es Ihnen, sauberer und leichter Code zu lesen. Dies kann Ihnen helfen, häufige Programmierprobleme wie Nebenwirkungen und Zustandsänderungen zu vermeiden, wodurch Ihr Code die Vorhersage und Prüfung erleichtert. Die funktionale Programmierung ermöglicht auch modulare Code, da Funktionen einfach kombiniert und wiederverwendet werden können.

Was sind die Einschränkungen oder Herausforderungen der funktionalen Programmierung mit PHP?

Während die funktionale Programmierung ihre Vorteile hat, hat sie auch einige Herausforderungen. PHP war ursprünglich nicht für die funktionale Programmierung entwickelt, sodass einige Funktionen möglicherweise nicht so leistungsfähig oder effizient sind wie Sprachen, die für die funktionale Programmierung entwickelt wurden. Darüber hinaus erfordert die funktionelle Programmierung unterschiedliche Denkweisen, und die Lernkurve kann für Entwickler, die an eine imperative oder objektorientierte Programmierung gewöhnt sind, steil sein.

Kann ich eine Mischung aus funktionaler und objektorientierter Programmierung in PHP verwenden?

Ja, PHP ist eine Multi-Absatz-Sprache, was bedeutet, dass Sie verschiedene Programmierstile mischen können. Sie können objektorientierte Programmierungen für die Anwendungsteile verwenden, die von Zustand und Verhalten profitieren, sowie die funktionale Programmierung für die Anwendungsteile, die von staatenlosen, seitlich effektfreien Funktionen profitieren. Dies gibt Ihnen die Flexibilität, die beste Methode für jeden Teil der Anwendung auszuwählen.

Wie wirkt sich die funktionale Programmierung auf die Leistung in PHP aus?

Der Einfluss der funktionellen Programmierung auf die PHP -Leistung kann variieren. In einigen Fällen kann die funktionale Programmierung effizientere Code schreiben, da sie Zustandsänderungen und Nebenwirkungen vermeidet. In anderen Fällen kann es jedoch ineffizient sein, da es normalerweise das Erstellen neuer Objekte beinhaltet, anstatt vorhandene Objekte zu ändern. Es ist wichtig, Ihren Code zu analysieren und zu testen, um sicherzustellen, dass er Ihren Leistungsanforderungen entspricht.

Was sind einige gute Ressourcen für das Lernen von PHP -funktionellen Programmierungen?

Es stehen viele Ressourcen zur Verfügung, um PHP -funktionale Programmierung zu erlernen. Einige gute Ausgangspunkte umfassen das PHP -Handbuch (mit einem Abschnitt zur funktionalen Programmierung) sowie Online -Tutorials und -artikel. Es gibt auch Bücher zu diesem Thema, wie z. B. die pHP -funktionale Programmierung von Gilles Crettenand.

Kann ich die funktionale Programmierung für die Webentwicklung in PHP verwenden?

Ja, Sie können funktionale Programmierung für die Webentwicklung in PHP verwenden. Funktionelle Programmierung kann Ihnen helfen, sauberer und modularerer Code zu schreiben, was in einer Webentwicklungsumgebung von Vorteil sein kann. Denken Sie jedoch daran, dass PHP eine Multi-Absatz-Sprache ist, sodass Sie auch andere Programmierstile verwenden können, wie z. B. objektorientierte Programmierung.

Wie kann man mit der Fehlerbehandlung in der funktionalen Programmierung in PHP umgehen?

In der funktionalen Programmierung erfolgt die Fehlerbehandlung normalerweise durch Verwendung von Monaden, einer Datenstruktur, die eher Berechnungen als Werte darstellen kann. In PHP können Sie den Monaden für Fehlerbehandlungen verwenden. Auf diese Weise können Sie Vorgänge miteinander verbinden, und wenn Operationen ausfallen, wird der Rest der Kette übersprungen.

Ist die funktionelle Programmierung in PHP für große Anwendungen geeignet?

funktionale Programmierung kann für große Anwendungen verwendet werden, hängt jedoch von den spezifischen Anforderungen der Anwendung ab. Funktionelle Programmierung kann sauberer und modularerer Code schreiben, was in groß angelegten Umgebungen von Vorteil sein kann. In einigen Fällen kann es jedoch auch ineffizient sein, daher ist es wichtig, Kompromisse in Betracht zu ziehen.

Das obige ist der detaillierte Inhalt vonPHP Master | Funktionelle Programmierung in PHP. 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