PHPの 匿名関数 について読むのがとても楽しみでした。これにより、 create_function でできるよりも簡単な関数の変数を宣言できます。今、私は変数を渡される関数があるのだろうか、それが関数であるかどうかを判断するためにどのように確認できますか? is_function()関数はまだありません。関数である変数のvar_dumpを実行すると::
$func = function(){
echo 'asdf';
};
var_dump($func);
私はこれを得る:
object(Closure)#8 (0) { }
これが機能であるかどうかを確認する方法についての考えはありますか?
つかいます - is_callable
は、指定された変数が関数かどうかを判断します。例えば:
$func = function()
{
echo 'asdf';
};
if( is_callable( $func ) )
{
// Will be true.
}
function_exists
指定された名前の関数があることを確認します。そして、それを匿名関数と組み合わせるには、これを試してください:
function is_function($f) {
return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure));
}
変数が匿名関数であり、呼び出し可能な文字列または配列ではないかどうかのみを確認する場合は、instanceof
を使用します。
$func = function()
{
echo 'asdf';
};
if($func instanceof Closure)
{
// Will be true.
}
(PHP 5.3)で追加された種類の)匿名関数は常にClosure
クラスのインスタンスであり、Closure
クラスのすべてのインスタンスは匿名です関数。
PHPにはおそらく間違いなく関数と見なされる可能性のある別のタイプのものがあり、それは__invoke
魔法のメソッドを実装するオブジェクトです。配列)、method_exists($func, '__invoke')
を使用します。一貫性のためにクロージャーは__invoke
を実装するため、これにはクロージャーが含まれます。
function is_function($f) {
return is_callable($f) && !is_string($f);
}