如何在PHP中调用可调用函数?

时间:2015-02-19 12:44:59

标签: php function recursion callback callable

我有一个标题为$post_data的数组。我想将此数组作为参数传递给某个函数。除了这个数组,我还要传递另一个参数,即可调用的'function name'作为函数调用中的第二个参数。

我不明白如何实现这一点。

以下是需要调用的函数体:

//Following is the function to be called
function walk_recursive_remove(array $array, callable $callback) {
  foreach ($array as $k => $v) {
    if (is_array($v)) {
      $array[$k] = walk_recursive_remove($v, $callback);
    } else {
      if ($callback($v, $k)) {
        unset($array[$k]);
      }
    }
  }
  return $array;
}

//Following is the callback function to be called

function unset_null_children($value, $key){
  return $value == NULL ? true : false;
}

The function call that I tried is as follows :
//Call to the function walk_recursive_remove
$result = walk_recursive_remove($post_data, unset_null_children);

有人可以帮我纠正我在调用函数时所犯的错误吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

首先,通过使用

调用函数的方式与您想要的方式类似
call_user_func()

call_user_func_array()

在您的情况下,因为您想要发送参数,所以您想使用第二个参数call_user_func_array()

您可以在http://php.net/manual/en/language.types.callable.php上找到有关这些内容的更多信息。

与此同时,我简化了你的例子并创建了一个小例子。

function walk_recursive_remove(array $array, callable $callback) {
    foreach($array as $k => $v){
        call_user_func_array($callback,array($k,$v));
    }
}

//Following is the callback function to be called

function unset_null_children($key, $value){
  echo 'the key : '.$key.' | the value : '.$value ;
}

//Call to the function walk_recursive_remove
$post_data = array('this_is_a_key' => 'this_is_a_value');
$result = walk_recursive_remove($post_data, 'unset_null_children');

答案 1 :(得分:1)

使用PHP 7,您可以在任何地方使用更好的变量函数语法。它适用于静态/实例函数,它可以采用一系列参数。更多信息here和相关问题here

$ret = $callable(...$params);