Heim >Backend-Entwicklung >PHP-Tutorial >Funktionelle Programmierung in PHP: Funktionen höherer Ordnung

Funktionelle Programmierung in PHP: Funktionen höherer Ordnung

Jennifer Aniston
Jennifer AnistonOriginal
2025-02-08 11:10:12648Durchsuche

Functional Programming in PHP: Higher-order Functions

eingehendes Verständnis von Funktionen höherer Ordnung in PHP: Verbesserung der Codeflexibilität und Wiederverwendbarkeit

erweiterte Funktionen werden in vielen großen Anwendungen und Frameworks häufig verwendet. JavaScript, Java, .Net, Python und sogar PHP unterstützen das Konzept der Funktionen höherer Ordnung. Aber was sind Funktionen höherer Ordnung? Warum benutzen wir es? Was sind ihre Vorteile? Wie vereinfache ich den Code damit? Dieser Artikel konzentriert sich auf Funktionen höherer Ordnung in PHP und vergleichen sie mit anderen Sprachen.

Kernpunkte

  • Eine Funktion höherer Ordnung in PHP bezieht sich auf eine Funktion, die eine oder mehrere Funktionen als Eingabe akzeptieren oder eine Funktion als Ausgabe zurückgeben kann. Diese Funktion verbessert die Code -Flexibilität für eine einfache Erweiterung und die Wiederverwendung von Code.
  • In PHP kann das Schlüsselwort callable verwendet werden, um Funktionen höherer Ordnung zu identifizieren. Wenn eine Funktion oder Methode einen callable -Parameter aufweist, bedeutet dies, dass sie eine Funktion als Eingabe akzeptiert.
  • PHP enthält integrierte Funktionen höherer Ordnung wie array_map und array_filter. Diese Funktionen nehmen eine Rückruffunktion als Argument an und wenden sie auf unterschiedliche Weise auf Elemente des Arrays an.
  • Erstellen einer benutzerdefinierten PHP-Funktion höherer Ordnung muss eine Funktion definieren, die eine oder mehrere Funktionen als Parameter akzeptiert, als Ergebnis eine Funktion zurückgibt oder beide Eigenschaften aufweist. Beispielsweise übernimmt eine Funktion namens calc() mehrere Eingabefunktionen und arbeitet mit mehreren Parametern.
  • Funktionen mit hoher Ordnung können viele Vorteile bieten, z. B. die Reduzierung von Redundanzkessel-Code. Für Entwickler, die mit dem Konzept der funktionalen Programmierung nicht vertraut sind, erschweren sie den Code manchmal zu verstehen und zu debuggen.

erstklassige Funktion

Bevor Sie Funktionen höherer Ordnung verstehen, müssen Sie zunächst die Sprachmerkmale verstehen, die erstklassige Funktionen unterstützen (auch als Funktionen erster Ordnung bezeichnet). Dies bedeutet, dass die Sprache die Funktion als erstklassiger Bürger behandelt. Mit anderen Worten, die Sprache übernimmt Funktionen genauso wie Variablen. Sie können Funktionen in Variablen speichern, sie als Variablen an andere Funktionen übergeben, sie aus Funktionen wie Variablen zurückgeben und sie sogar in Arrays oder Objekteigenschaften speichern, wie Sie es mit Variablen tun würden. Heute haben die meisten modernen Sprachen diese Funktion standardmäßig. Sie müssen nur wissen, dass Funktionen wie Variablen übergeben und verwendet werden können.

Dieser Artikel konzentriert sich hauptsächlich auf die Übergabe von Funktionen als Parametern und Rückgabefunktionen als Ergebnisse und führt kurz die Konzepte nicht-lokaler Variablen und Verschlüsse ein. (Weitere Informationen zu diesen Konzepten in den Abschnitten 1.1, 1.4 und 1.3 der Wikipedia -Artikel, mit denen im vorherigen Absatz verknüpft ist.)

Was ist eine Funktion höherer Ordnung?

Funktionen Fortgeschrittene haben zwei Hauptmerkmale. Erweiterte Funktionen können ein oder zwei der folgenden Merkmale implementieren: Akzeptieren Sie eine oder mehrere Funktionen als Eingabe oder geben Sie eine Funktion als Ausgabe zurück. In PHP gibt es ein Schlüsselwort, das deutlich zeigt, dass eine Funktion eine Funktion höherer Ordnung ist: das Schlüsselwort callable. Obwohl dieses Schlüsselwort nicht unbedingt vorhanden ist, erleichtert es einfach, Funktionen höherer Ordnung zu erkennen. Wenn Sie eine Funktion oder Methode mit callable Parameter sehen, bedeutet dies, dass sie eine Funktion als Eingabe akzeptiert. Ein weiteres einfaches Flag ist, wenn Sie eine Funktion mit seiner return -Anweisung sehen, um eine Funktion zurückzugeben. Die return -Anweisung kann nur der Name der Funktion sein oder eine anonyme/Inline -Funktion sein. Hier sind einige Beispiele für jeden Typ.

<code class="language-php">// 我们将传递给高阶函数的简单用户定义函数
function echoHelloWorld() {
  echo "Hello World!";
}

// 接受函数作为输入并调用它的高阶函数
function higherOrderFunction(callable $func) {
  $func();
}

// 调用我们的高阶函数并传入我们的echoHelloWorld()函数。
// 请注意,我们只将名称作为字符串传递,没有括号。
// 这将输出 "Hello World!"
higherOrderFunction('echoHelloWorld'); </code>

Folgende Beispiele für Funktionen höherer Ordnung, die Funktionen zurückgeben:

<code class="language-php">// 返回PHP中名为trim()的现有函数。注意它是一个简单的字符串,没有括号。
function trimMessage1() {
  return 'trim';
}

// 这是一个使用匿名内联函数的示例
function trimMessage2() {
    return function($text) {
        return trim($text);
    };
}

// 返回'trim'函数
$trim1 = trimMessage1(); 

// 使用我们的字符串进行修剪并调用它
echo $trim1('  hello world  ');

// 返回内部调用'trim'的匿名函数
$trim2 = trimMessage1(); 

// 使用我们的字符串进行修剪并再次调用它
echo $trim2('  hello world  ');</code>

Sie können sich vorstellen, dass Sie eine Funktion übergeben und eine andere zurückgegebene Funktion generieren können. Sehr cleverer Trick, oder? Aber warum machst du das? Es klingt nach etwas, das die Dinge komplizierter macht.

Warum Funktionen höherer Ordnung verwenden oder erstellen?

Es gibt viele Gründe, warum Sie möglicherweise Funktionen höherer Ordnung in Ihrem Code erstellen müssen. Aus der Code -Flexibilität, der Code -Wiederverwendung, der Code -Erweiterung von Codelösungen, die den Code nachahmen, den Sie in anderen Programmen sehen, gibt es viele Dinge. Obwohl es viele Gründe gibt, werden wir hier einige von ihnen vorstellen.

Codelflexibilität

hinzufügen

Funktionen mit hoher Ordnung sorgen für viel Flexibilität. Basierend auf dem vorherigen Beispiel haben Sie möglicherweise einige Verwendungen gesehen. Sie können eine einzelne Funktion schreiben, die eine ganze Reihe verschiedener Funktionen übernimmt und sie verwendet, ohne Code schreiben zu müssen, um sie einzeln auszuführen.

Vielleicht weiß die Funktion höherer Ordnung selbst nicht, welche Art von Funktion sie erhalten wird. Wer sagt, eine Funktion muss Informationen über die von ihnen empfangene Funktion kennen? Die Eingabefunktion kann eine Weile eine add() -Funktion sein, und im nächsten Moment kann es eine divide() -Funktion sein. In beiden Fällen funktioniert es einwandfrei.

einfach zu erweitern, den Code

Diese Funktion erleichtert auch das Hinzufügen anderer Eingangsfunktionen später. Angenommen, Sie haben add() und divide(), aber Sie müssen später sum() Funktionen hinzufügen. Sie können sum() Funktionen schreiben und sie durch Funktionen höherer Ordnung weitergeben, ohne sie zu ändern. In den Beispielen später werden wir demonstrieren, wie diese Funktion verwendet werden, um unsere eigene calc() -Funktion zu erstellen.

Imitieren Sie Funktionen anderer Sprachen

Ein weiterer Grund, warum Sie in PHP Funktionen höherer Ordnung verwenden möchten, besteht darin, das Verhalten von Dekoratoren in Python zu simulieren. Sie "verzeichnen" eine Funktion in einer anderen, um das Verhalten dieser Funktion zu ändern. Zum Beispiel können Sie eine Funktion zum Zeitpunkt anderer Funktionen schreiben. Sie können eine Funktion höherer Ordnung schreiben, die eine Funktion nimmt, einen Timer startet, sie aufruft und dann den Timer beendet, um zu sehen, wie viel Zeit verstrichen ist.

Beispiel für vorhandene Funktionen höherer Ordnung in PHP

Die Suche nach Funktionen höherer Ordnung in PHP ist sehr einfach. Überprüfen Sie die PHP -Dokumentation und finden Sie eine Funktion/Methode, die die callable Eingabeparameter akzeptiert und Sie eine gefunden haben. Hier sind einige Beispiele für häufig verwendete Funktionen höherer Ordnung. Möglicherweise haben Sie sie sogar ohne Ihr Wissen verwendet.

erweiterte dynamische Kombination: array_map und array_filter

<code class="language-php">// 我们将传递给高阶函数的简单用户定义函数
function echoHelloWorld() {
  echo "Hello World!";
}

// 接受函数作为输入并调用它的高阶函数
function higherOrderFunction(callable $func) {
  $func();
}

// 调用我们的高阶函数并传入我们的echoHelloWorld()函数。
// 请注意,我们只将名称作为字符串传递,没有括号。
// 这将输出 "Hello World!"
higherOrderFunction('echoHelloWorld'); </code>

Lassen Sie uns sehen, wie eine andere Funktion verwendet wird, diesmal mit der Filterfunktion, die wir separat definiert haben:

<code class="language-php">// 返回PHP中名为trim()的现有函数。注意它是一个简单的字符串,没有括号。
function trimMessage1() {
  return 'trim';
}

// 这是一个使用匿名内联函数的示例
function trimMessage2() {
    return function($text) {
        return trim($text);
    };
}

// 返回'trim'函数
$trim1 = trimMessage1(); 

// 使用我们的字符串进行修剪并调用它
echo $trim1('  hello world  ');

// 返回内部调用'trim'的匿名函数
$trim2 = trimMessage1(); 

// 使用我们的字符串进行修剪并再次调用它
echo $trim2('  hello world  ');</code>

array_filter und array_map sind zwei sehr beliebte Funktionen höherer Ordnung, die Sie in vielen Codeprojekten finden. Eine andere Funktion, die Sie möglicherweise verwenden, ist call_user_func, die eine Funktion und eine Liste von Parametern und Aufrufen dieser Funktion aufnimmt. Dies ist im Wesentlichen eine benutzerdefinierte Funktion höherer Ordnung. Sein gesamtes Zweck ist es, andere benutzerdefinierte Funktionen aufzurufen:

<code class="language-php">$arrayOfNums = [1,2,3,4,5];

// array_map:使用内联匿名函数的示例
$doubledNums = array_map(function($num) {
  return $num * 2;
}, $arrayOfNums);

var_dump($doubledNums); // 输出包含 [2, 4, 6, 8, 10] 的数组</code>

So erstellen Sie Ihre eigenen Funktionen höherer Ordnung

Wir haben viele Beispiele dafür gezeigt, wie Funktionen höherer Ordnung in PHP funktionieren, und wir haben einige benutzerdefinierte Funktionen erstellt, um ihre verschiedenen Verwendungen zu demonstrieren. Aber zeigen wir seine Flexibilität mit einer neuen Funktion namens calc() weiter demonstrieren. Diese Funktion empfängt zwei Parameter und eine Funktion, die diese beiden Parameter betreiben, um uns ein Ergebnis zu erzielen:

<code class="language-php">$arrayOfNums = [1,2,3,4,5];

// 创建函数并将其提供给高阶函数array_filter()的示例
function isEven($num) {
  return ($num % 2) === 0;
}

// array_filter是一个高阶函数
$evenNums = array_filter($arrayOfNums, 'isEven');

var_dump($evenNums); // 输出包含 [2, 4] 的数组</code>

Beachten Sie, dass unsere calc() -Funktionen sehr allgemein geschrieben sind, sodass Sie eine Reihe anderer Funktionen erhalten und sie mit den Parametern $n1 und $n2 aufrufen können. In diesem Fall ist es unserer berechneten Funktion egal, welche Funktion sie ausführt. Es gibt nur das Argument an die Funktion über und gibt das Ergebnis zurück.

Aber warte: Unser Chef hat uns gerade gebeten, dem vorhandenen System eine Funktion hinzuzufügen, um zwei Strings zusammen hinzuzufügen. Die Verkettung von Saiten ist jedoch kein typischer mathematischer Operation. Mit unseren Einstellungen hier müssen wir jedoch nur die String -Verkettung hinzufügen und durch calc():

weitergeben
<code class="language-php">function printCustomMessage($message) {
  echo "$message";
}

call_user_func('printCustomMessage', '通过使用call_user_func调用自定义消息!');</code>

Obwohl dieses Beispiel weit hergeholt ist, zeigt es, wie Sie dieses Konzept in einem großen Projekt verwenden können. Vielleicht bestimmen Funktionen höherer Ordnung, wie Ereignisse verarbeitet werden. Vielleicht können Sie es abhängig vom ausgelösten Ereignis durch die von Ihnen übergebene Handler -Funktion leiten. Die Möglichkeiten sind endlos.

Vergleich mit anderen Sprachen mit Funktionen höherer Ordnung

Nehmen wir einen einfachen Dekorateur in Python als Beispiel und vergleichen Sie ihn mit JavaScript und vergleichen Sie ihn dann mit PHP. Auf diese Weise können Sie sehen, dass es gleichwertig ist, wenn Sie Python oder JS kennen.

Seite an Seite Vergleich mit Python und JavaScript

<code class="language-php">function add($a, $b) {
  return $a + $b;
}

function subtract($a, $b) {
  return $a - $b;
}

function multiply($a, $b) {
  return $a * $b;
}

// 传递$n1和$n2的高阶函数
function calc($n1, $n2, $math_func) {
  return $math_func($n1, $n2);
}

$addedNums = calc(1, 5, 'add');
$subtractedNums = calc(1, 5, 'subtract');
$multipliedNums = calc(1, 5, 'multiply');

// 输出 6
echo "相加的数字:$addedNums\n";

// 输出 -4
echo "相减的数字:$subtractedNums\n";

// 输出 5
echo "相乘的数字:$multipliedNums\n";</code>

Lassen Sie uns nun sehen, wie dies in JavaScript-Funktionen höherer Ordnung implementiert werden kann:

<code class="language-php">function addTwoStrings($a, $b) {
  return $a . " " . $b;
}

// 输出 "Hello World!"
$concatenatedStrings = calc('Hello', 'World!', 'addTwoStrings');</code>

Vergleichen wir es schließlich mit PHP:

<code class="language-python">def say_message(func):
    def wrapper():
        print('调用函数之前打印')
        func()
        print('调用函数之后打印')
    return wrapper

def say_hello_world():
    print("Hello World!")

# 将我们的hello world函数传递给say_message函数。
# 它返回一个函数,然后我们可以调用它
# 注意:这一行可以用say_hello_world方法上的@say_message(派语法)代替
say_hello_world = say_message(say_hello_world)

# 调用创建的函数
say_hello_world()

# 输出...
# 调用函数之前打印
# Hello World!
# 调用函数之后打印</code>

Aus dem Vergleich von Seite an Seite können wir sehen, dass die PHP-Version der JavaScript-Syntax sehr ähnlich ist. Wenn Sie jedoch ein wenig über Python und Dekorateur wissen, können Sie sehen, wie Sie einen Dekorateur in eine von zwei anderen Programmiersprachen umwandeln können.

kurze Beschreibung der Lambda/Anonymous -Funktionen

Bei der Verwendung höherer Ordnung sind die Verwendung von anonymen Funktionen inline (auch als Lambdas bezeichnet). In dem Beispiel, das wir oben gesehen haben, habe ich dieses Format verwendet. Abgesehen davon habe ich auch eine explizitere Version von der Definition der Funktion verwendet und dann an eine Funktion höherer Ordnung weitergegeben. Dies soll sich daran gewöhnen, beide Versionen zu sehen. In den meisten Fällen werden Inline-Lambda-Versionen in Frameworks angezeigt, die Funktionen mit hoher Ordnung verwenden. Lassen Sie sich von diesem Format nicht erschrecken. Sie erstellen einfach eine einfache Funktion ohne Namen und verwenden sie, um den unabhängigen Funktionsnamen anzugeben.

Schlussfolgerung

In diesem Artikel stellen wir die grundlegende Definition ein, eine Funktion zu einer Funktion höherer Ordnung zu machen. Jede Funktion, die eine Funktion (oder beides) akzeptiert oder zurückgibt, kann als Funktion höherer Ordnung angesehen werden. Wir diskutieren auch, warum Sie diese Art von Funktionen und deren Vorteile erstellen möchten.

array_map Dann zeigen wir einige Beispiele für vorhandene Funktionen höherer Ordnung in PHP, wie array_filter und calc() und erstellen dann unsere eigene Funktion höherer Ordnung, die

namen mit mehreren Parametern arbeiten. Anschließend haben wir einen Side-by-Side-Vergleich durchgeführt, um zu zeigen, wie die Lösung von PHP mit Python Decorator und JavaScript-Implementierungen vergleichbar ist. Ich hoffe, Sie können mehr über Funktionen höherer Ordnung erfahren und warum Sie sie möglicherweise in Ihrer nächsten großen Lösung berücksichtigen müssen. Sie können viele Vorteile bieten und den Code des Boilerplate reduzieren, der möglicherweise redundant ist.

Wenn Sie mehr über die funktionale Programmierung in PHP erfahren möchten, können Sie sich auf unser Tutorial beziehen.

Danke fürs Lesen!

FAQs für erweiterte Auftragsfunktionen in PHP

Was ist die Bedeutung von Funktionen höherer Ordnung in PHP?

Funktionen mit hoher Ordnung in PHP sind ein grundlegendes Konzept in der funktionalen Programmierung. Dies sind Funktionen, die bei anderen Funktionen wirken können, indem sie sie als Argumente betrachten oder als Ergebnisse zurückgeben. Dies ermöglicht einen abstrakteren und prägnanteren Code, wodurch die Lesbarkeit und Wartbarkeit verbessert wird. Funktionen für Fortgeschrittene können dazu beitragen, Code-Duplikation und Komplexität zu verringern und Ihren Code effizienter und einfacher zu debuggen.

Was sind die Unterschiede zwischen Funktionen höherer Ordnung und gewöhnlichen Funktionen in PHP?

Normale Funktionen in PHP führen spezifische Aufgaben und Rückgabeergebnisse aus. Andererseits können höherreiche Funktionen eine oder mehrere Funktionen als Parameter, Rückgabefunktionen als Ergebnisse oder gleichzeitig diese beiden Eigenschaften aufnehmen. Dies ermöglicht eine größere Flexibilität und Abstraktion in Ihrem Code, sodass Sie komplexere Funktionen mit weniger Code erstellen können.

Können Sie Beispiele für Funktionen höherer Ordnung in PHP angeben?

array_map Betrachten wir natürlich die

-Funktion in PHP, was eine Funktion höherer Ordnung ist. Die Rückruffunktion und das Array als Parameter nimmt die Rückruffunktion auf jedes Element des Arrays an und gibt ein neues Array zurück, das die Ergebnisse enthält.
<code class="language-php">// 我们将传递给高阶函数的简单用户定义函数
function echoHelloWorld() {
  echo "Hello World!";
}

// 接受函数作为输入并调用它的高阶函数
function higherOrderFunction(callable $func) {
  $func();
}

// 调用我们的高阶函数并传入我们的echoHelloWorld()函数。
// 请注意,我们只将名称作为字符串传递,没有括号。
// 这将输出 "Hello World!"
higherOrderFunction('echoHelloWorld'); </code>

Was sind die Vorteile der Verwendung von Funktionen höherer Ordnung in PHP?

Funktionen mit hoher Ordnung in PHP bieten mehrere Vorteile. Sie ermöglichen einen abstrakteren und prägnanteren Code, der die Lesbarkeit und Wartbarkeit verbessern kann. Sie können auch dazu beitragen, Code -Duplikation und Komplexität zu reduzieren und Ihren Code effizienter und einfacher zu debuggen. Darüber hinaus können Funktionen höherer Ordnung die Wiederverwendung von Code erleichtern, da Sie verschiedene Funktionen an Funktionen höherer Ordnung übergeben können, um unterschiedliche Verhaltensweisen zu erreichen.

Gibt es einen Nachteil der Verwendung von Funktionen höherer Ordnung in PHP?

Während Funktionen höherer Ordnung viele Vorteile bieten, haben sie möglicherweise auch einige Nachteile. Manchmal erschweren sie Code zu verstehen und zu debuggen, insbesondere für Entwickler, die mit dem Konzept der funktionalen Programmierung nicht vertraut sind. Darüber hinaus kann die Verwendung von Funktionen höherer Ordnung manchmal zu Leistungsaufwand führen, da sie häufig das Erstellen und Aufrufen anderer Funktionen beinhalten.

Wie erstelle ich meine eigene Funktion höherer Ordnung in PHP?

Erstellen Ihrer eigenen Funktion höherer Ordnung in PHP erfordert eine Funktion, die eine oder mehrere Funktionen als Parameter akzeptieren, die Funktion als Ergebnis zurückgeben oder beide Eigenschaften aufweisen. Hier ist ein einfaches Beispiel für eine einfache Funktion höherer Ordnung, die eine Funktion als Argument nimmt und sie auf einen Wert anwendet:

<code class="language-php">// 返回PHP中名为trim()的现有函数。注意它是一个简单的字符串,没有括号。
function trimMessage1() {
  return 'trim';
}

// 这是一个使用匿名内联函数的示例
function trimMessage2() {
    return function($text) {
        return trim($text);
    };
}

// 返回'trim'函数
$trim1 = trimMessage1(); 

// 使用我们的字符串进行修剪并调用它
echo $trim1('  hello world  ');

// 返回内部调用'trim'的匿名函数
$trim2 = trimMessage1(); 

// 使用我们的字符串进行修剪并再次调用它
echo $trim2('  hello world  ');</code>

Können Funktionen höherer Ordnung in PHP mehrere Funktionen zurückgeben?

Ja, Funktionen höherer Ordnung in PHP können mehrere Funktionen zurückgeben. Dies geschieht normalerweise durch Rückgabe einer Reihe von Funktionen. Denken Sie jedoch daran, dass jede zurückgegebene Funktion ihren eigenen Umfang hat und keine Variablen mit anderen zurückgegebenen Funktionen freigibt.

Können Funktionen höherer Ordnung in PHP-Funktionen aus verschiedenen Bereichen akzeptieren?

Ja, Funktionen höherer Ordnung in PHP können Funktionen aus verschiedenen Bereichen akzeptieren. Dies liegt daran, dass PHP erstklassige Funktionen unterstützt, was bedeutet, dass Funktionen als Parameter an andere Funktionen übergeben, von anderen Funktionen zurückgegeben und Variablen zugewiesen werden.

Wie besteht die Beziehung zwischen Funktionen höherer Ordnung in PHP und Schließungen?

Verschlüsse in PHP sind eine anonyme Funktion, die Variablen in umgebenden Scopes erfasst. Sie werden häufig mit Funktionen höherer Ordnung verwendet, da sie die Erstellung von Funktionen ermöglichen, die auf mehr Daten als ihre Parameter zugreifen. Dies ist sehr nützlich, um flexiblere und wiederverwendbarere Code zu erstellen.

Gibt es in eingebaute Funktionen höherer Ordnung in PHP?

Ja, PHP bietet einige integrierte Funktionen höherer Ordnung. Einige Beispiele sind array_map, array_filter und array_reduce. Diese Funktionen nehmen die Rückruffunktion als Argument an und wenden sie auf verschiedene Weise auf die Elemente des Arrays an.

Das obige ist der detaillierte Inhalt vonFunktionelle Programmierung in PHP: Funktionen höherer Ordnung. 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