Как вызвать вызываемую функцию в 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);

Может кто-нибудь помочь мне исправить ошибку, которую я совершаю при вызове функции?

Заранее спасибо.

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

Другие решения

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector