【问题标题】:How to call the callable function in PHP?如何在 PHP 中调用可调用函数?
【发布时间】:2015-04-20 19:42:35
【问题描述】:

我有一个名为$post_data 的数组。我想将此数组作为参数传递给某个函数。除了这个数组,我还必须传递另一个参数,即可调用的“函数名”作为函数调用中的第二个参数。

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

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

//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;
}

我尝试的函数调用如下:

//Call to the function walk_recursive_remove
$result = walk_recursive_remove($post_data, unset_null_children);

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

提前致谢。

【问题讨论】:

    标签: php function recursion callback callable


    【解决方案1】:

    首先,像您打算的那样调用函数的方法是使用

    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');
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-01-20
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2020-11-15
        • 2021-03-20
        相关资源
        最近更新 更多