0

PHP 配列内の無名関数を確認するにはどうすればよいですか?

例:

$array = array('callback' => function() {
    die('calls back');
});

次に、単にin_array, を次のように使用できますか。

if( in_array(function() {}, $array) ) {
    // Yes! There is an anonymous function inside my elements.
} else {
    // Nop! There are no anonymous function inside of me.
}

メソッドチェーンと PHP の Magic Methods を試していて、いくつかの関数を匿名で提供するところまで来ました。それらが定義されているかどうかを確認したいだけですが、オブジェクトをループしたり、使用したりしたくありません。gettype、または同様のもの。

4

2 に答える 2

3

値が のインスタンスであるかどうかを確認することで、配列をフィルタリングできますClosure

$array = array( 'callback' => function() { die( 'callback'); });
$anon_fns = array_filter( $array, function( $el) { return $el instanceof Closure; });
if( count( $anon_fns) == 0) { // Assumes count( $array) > 0
    echo 'No anonymous functions in the array';
} else {
    echo 'Anonymous functions exist in the array';
}

ほとんどの場合、配列の要素が のインスタンスであるかどうかを確認するだけですClosure。そうであれば、あなたは呼び出し可能な型を持っています。

于 2013-04-19T18:54:08.537 に答える
1

Nickb の回答は、それが匿名関数であるかどうかを判断するのに最適ですが、 is_callable を使用して、それが任意のタイプの関数であるかどうかを判断することもできます (おそらく想定する方が安全です)。

例えば

$x = function() { die(); }
$response = action( array( $x ) );
...
public function action( $array ){
    foreach( $array as $element )
        if( is_callable( $element ) ) 
           ....
}
于 2013-04-19T19:08:51.860 に答える