J'étais très excité de lire sur les fonctions anonymes en php, qui vous permettent de déclarer une variable qui fonctionne plus facilement que vous ne pourriez le faire avec create_function . Maintenant, je me demande si j'ai une fonction à laquelle une variable est passée, comment puis-je la vérifier pour déterminer si c'est une fonction? Il n'y a pas encore de fonction is_function (), et quand je fais un var_dump d'une variable qui est une fonction:
$func = function(){
echo 'asdf';
};
var_dump($func);
J'ai compris:
object(Closure)#8 (0) { }
Des réflexions sur la façon de vérifier s'il s'agit d'une fonction?
Vous pouvez utiliser
function_exists
pour vérifier qu'il existe une fonction avec le nom donné. Et pour combiner cela avec des fonctions anonymes, essayez ceci:la source
is_object()
etinstanceof Closure
c'est un moyen beaucoup plus robuste de vérifier cela!Si vous souhaitez uniquement vérifier si une variable est une fonction anonyme et non une chaîne ou un tableau appelable, utilisez
instanceof
.Les fonctions anonymes (du type qui ont été ajoutés dans PHP 5.3) sont toujours des instances de la
Closure
classe, et chaque instance de laClosure
classe est une fonction anonyme.Il y a un autre type de chose en PHP qui pourrait sans doute être considéré comme une fonction, et ce sont les objets qui implémentent la
__invoke
méthode magique. Si vous souhaitez les inclure (tout en excluant les chaînes et les tableaux), utilisezmethod_exists($func, '__invoke')
. Cela inclura toujours les fermetures, puisque les fermetures implémentent la__invoke
cohérence.la source
is_callable()
il essaiera de trouver une méthode à appeler basée sur une chaîne ou un tableau passé, qui peut charger automatiquement des classes et peut ne pas être le comportement que vous attendez / exigez.la source
En php, les appelables valides peuvent être des fonctions, le nom des fonctions (chaînes) et des tableaux des formulaires
['className', 'staticMethod']
ou[$object, 'method']
, pour détecter, seules les fonctions doivent exclure les chaînes et les tableaux:la source