Ich habe mich gefragt, ob es möglich ist, eine Funktion als Parameter in PHP zu übergeben. Ich möchte so etwas wie beim Programmieren in JS:
object.exampleMethod(function(){
// some stuff to execute
});
Ich möchte diese Funktion irgendwo in exampleMethod ausführen. Ist das in PHP möglich?
Antworten:
Es ist möglich, wenn Sie PHP 5.3.0 oder höher verwenden.
Siehe Anonyme Funktionen im Handbuch.
In Ihrem Fall würden Sie Folgendes definieren
exampleMethod
:quelle
create_function
create_function()
. Es ist nicht ganz dasselbe, da Sie Ihre Funktion als Code-Zeichenfolge übergeben müssen, die danneval()
hinter die Kulissen gelangt. Nicht ideal, aber Sie können es möglicherweise verwenden.exampleMethod(strpos);
Um den anderen etwas hinzuzufügen, können Sie einen Funktionsnamen übergeben:
Dies wird in PHP4 funktionieren.
quelle
Sie können auch create_function verwenden , um eine Funktion als Variable zu erstellen und weiterzugeben. Das Gefühl anonymer Funktionen gefällt mir allerdings besser. Geh zombat.
quelle
Codieren Sie es einfach so:
Es wäre großartig, wenn Sie so etwas erfinden könnten (inspiriert von Laravel Illuminate):
quelle
PHP-VERSION> = 5.3.0
Beispiel 1: Grundlegend
Beispiel 2: Standardobjekt
Beispiel 3: Nicht statischer Klassenaufruf
Beispiel 4: statischer Klassenaufruf
quelle
Laut der Antwort von @ zombat ist es besser, zuerst die anonymen Funktionen zu validieren:
Oder überprüfen Sie den Argumenttyp seit PHP 5.4.0:
quelle
Getestet für PHP 5.3
Wie ich hier sehe, könnte Anonymous Function Ihnen helfen: http://php.net/manual/en/functions.anonymous.php
Was Sie wahrscheinlich brauchen und es wird nicht gesagt, bevor Sie eine Funktion übergeben, ohne sie in eine im laufenden Betrieb erstellte Funktion einzuschließen . Wie Sie später sehen werden, müssen Sie den in eine Zeichenfolge geschriebenen Funktionsnamen als Parameter übergeben, die "Aufrufbarkeit" überprüfen und ihn dann aufrufen.
Die zu überprüfende Funktion:
Verwenden Sie dann, um es aufzurufen, diesen Code (wenn Sie auch Parameter benötigen, fügen Sie diese in ein Array ein), siehe: http://php.net/manual/en/function.call-user-func.php
wie folgt (auf ähnliche, parameterlose Weise):
Hier ist eine Klasse, die erklärt, wie man etwas Ähnliches macht:
und ein Anwendungsbeispiel
quelle
Einfaches Beispiel mit einer Klasse:
quelle