Ich war ziemlich aufgeregt, über anonyme Funktionen in PHP zu lesen , mit denen Sie eine Variable deklarieren können, deren Funktion einfacher ist als mit create_function . Jetzt frage ich mich, ob ich eine Funktion habe, der eine Variable übergeben wird. Wie kann ich sie überprüfen, um festzustellen, ob es sich um eine Funktion handelt? Es gibt noch keine is_function () -Funktion, und wenn ich einen var_dump einer Variablen mache, die eine Funktion ist ::
$func = function(){
echo 'asdf';
};
var_dump($func);
Ich verstehe das:
object(Closure)#8 (0) { }
Irgendwelche Gedanken darüber, wie man prüft, ob dies eine Funktion ist?
php
anonymous-function
Jage
quelle
quelle
Sie können
function_exists
damit überprüfen, ob eine Funktion mit dem angegebenen Namen vorhanden ist. Und um dies mit anonymen Funktionen zu kombinieren, versuchen Sie Folgendes:quelle
is_object()
undinstanceof Closure
ist eine viel robustere Möglichkeit, dies zu überprüfen!Wenn Sie nur überprüfen möchten, ob eine Variable eine anonyme Funktion und keine aufrufbare Zeichenfolge oder ein aufrufbares Array ist, verwenden Sie
instanceof
.Anonyme Funktionen (wie sie in PHP 5.3 hinzugefügt wurden) sind immer Instanzen der
Closure
Klasse, und jede Instanz derClosure
Klasse ist eine anonyme Funktion.Es gibt eine andere Art von Dingen in PHP, die wohl als Funktion angesehen werden könnten, und das sind Objekte, die die
__invoke
magische Methode implementieren . Wenn Sie diese einschließen möchten (ohne Zeichenfolgen und Arrays auszuschließen), verwenden Siemethod_exists($func, '__invoke')
. Dies schließt weiterhin Schließungen ein, da Schließungen aus Gründen der__invoke
Konsistenz implementiert werden .quelle
is_callable()
versucht wird, eine Methode zum Aufrufen zu finden, die auf einer übergebenen Zeichenfolge oder einem übergebenen Array basiert. Diese können Klassen automatisch laden und entsprechen möglicherweise nicht dem Verhalten, das Sie erwarten / benötigen.quelle
In PHP können gültige Callables Funktionen, Name von Funktionen (Strings) und Arrays der Formulare sein
['className', 'staticMethod']
oder[$object, 'method']
, um nur Funktionen zu erkennen, müssen Strings und Arrays ausgeschlossen werden:quelle