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.
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. 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. calc()
mehrere Eingabefunktionen und arbeitet mit mehreren Parametern. 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.)
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.
// 我们将传递给高阶函数的简单用户定义函数 function echoHelloWorld() { echo "Hello World!"; } // 接受函数作为输入并调用它的高阶函数 function higherOrderFunction(callable $func) { $func(); } // 调用我们的高阶函数并传入我们的echoHelloWorld()函数。 // 请注意,我们只将名称作为字符串传递,没有括号。 // 这将输出 "Hello World!" higherOrderFunction('echoHelloWorld');
Folgende Beispiele für Funktionen höherer Ordnung, die Funktionen zurückgeben:
// 返回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 ');
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.
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.
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.
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.
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.
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.
array_map
und array_filter
// 我们将传递给高阶函数的简单用户定义函数 function echoHelloWorld() { echo "Hello World!"; } // 接受函数作为输入并调用它的高阶函数 function higherOrderFunction(callable $func) { $func(); } // 调用我们的高阶函数并传入我们的echoHelloWorld()函数。 // 请注意,我们只将名称作为字符串传递,没有括号。 // 这将输出 "Hello World!" higherOrderFunction('echoHelloWorld');
Lassen Sie uns sehen, wie eine andere Funktion verwendet wird, diesmal mit der Filterfunktion, die wir separat definiert haben:
// 返回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 ');
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:
$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] 的数组
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:
$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] 的数组
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()
:
function printCustomMessage($message) { echo "$message"; } call_user_func('printCustomMessage', '通过使用call_user_func调用自定义消息!');
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.
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.
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";
Lassen Sie uns nun sehen, wie dies in JavaScript-Funktionen höherer Ordnung implementiert werden kann:
function addTwoStrings($a, $b) { return $a . " " . $b; } // 输出 "Hello World!" $concatenatedStrings = calc('Hello', 'World!', 'addTwoStrings');
Vergleichen wir es schließlich mit PHP:
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! # 调用函数之后打印
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.
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.
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
Wenn Sie mehr über die funktionale Programmierung in PHP erfahren möchten, können Sie sich auf unser Tutorial beziehen.
Danke fürs Lesen!
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.
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.
array_map
Betrachten wir natürlich die
// 我们将传递给高阶函数的简单用户定义函数 function echoHelloWorld() { echo "Hello World!"; } // 接受函数作为输入并调用它的高阶函数 function higherOrderFunction(callable $func) { $func(); } // 调用我们的高阶函数并传入我们的echoHelloWorld()函数。 // 请注意,我们只将名称作为字符串传递,没有括号。 // 这将输出 "Hello World!" higherOrderFunction('echoHelloWorld');
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.
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.
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:
// 返回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 ');
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.
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.
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.
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!