我们如何检查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的魔术方法,并且我已经到了我匿名提供某些功能的地步,并且只想检查它们是否已定义,但我希望不要遍历该对象,也不使用gettype
或任何类似的东西。
答案 0 :(得分: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
的实例。如果是,则您具有可调用类型。
答案 1 :(得分:1)
Nickb的回答非常适合确定它是否是一个匿名函数,但您也可以使用is_callable来确定它是否是任何类型的函数(可能更安全地假设)
例如
$x = function() { die(); }
$response = action( array( $x ) );
...
public function action( $array ){
foreach( $array as $element )
if( is_callable( $element ) )
....
}