J'étais assez enthousiaste à l'idée de fonctions anonymes en php, qui vous permettent de déclarer une variable dont la fonction est plus simple qu'avec create_function . Maintenant, je me demande si une fonction est passée à une variable, comment puis-je la vérifier pour déterminer s'il s'agit d'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 idées sur la façon de vérifier si cela est une fonction?
Utilisez is_callable
pour déterminer si une variable donnée est une fonction. Par exemple:
$func = function()
{
echo 'asdf';
};
if( is_callable( $func ) )
{
// Will be true.
}
Vous pouvez utiliser function_exists
pour vérifier s’il existe une fonction portant le nom indiqué. Et pour combiner cela avec des fonctions anonymes, essayez ceci:
function is_function($f) {
return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure));
}
Si vous souhaitez uniquement vérifier si une variable est une fonction anonyme et non une chaîne ou un tableau appelable, utilisez instanceof
.
$func = function()
{
echo 'asdf';
};
if($func instanceof Closure)
{
// Will be true.
}
Les fonctions anonymes (du type ajouté dans PHP 5.3) sont toujours des instances de la classe Closure
et chaque instance de la classe Closure
est une fonction anonyme.
Il existe un autre type de chose dans PHP qui pourrait sans doute être considérée comme une fonction, à savoir les objets qui implémentent la méthode magique __invoke
. Si vous souhaitez les inclure (tout en excluant les chaînes et les tableaux), utilisez method_exists($func, '__invoke')
. Cela inclura toujours les fermetures, car les fermetures implémentent __invoke
pour des raisons de cohérence.
function is_function($f) {
return is_callable($f) && !is_string($f);
}