Как вызвать вызываемую функцию в PHP?

У меня есть один массив под названием $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;
}

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 ответа

Решение

Во-первых, способ вызова функции, такой, как вы намереваетесь, заключается в использовании

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

В PHP 7 вы можете использовать лучший синтаксис функции переменных везде. Он работает со статическими функциями / функциями экземпляра и может принимать массив параметров. Больше информации здесь и связанный вопрос здесь

$ret = $callable(...$params);
Другие вопросы по тегам