call_user_func_array

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

call_user_func_arrayВызывает callback-функцию с массивом параметров

Описание

call_user_func_array(callable$callback, array$args): mixed

Вызывает callback-функцию callback, с параметрами из массива args.

Список параметров

callback

Вызываемая функция типа callable.

args

Передаваемые в функцию параметры в виде массива.

Если все ключи args являются числовыми, ключи игнорируются и каждый элемент будет передан в параметр callback как позиционный аргумент, по порядку.

Если какие-либо ключи args являются строками, эти элементы будут переданы в параметр callback как именованные аргументы, с именем, заданным ключом.

Произойдёт неисправимая ошибка, если числовой ключ в args появляется после строкового ключа или если строковый ключ не совпадает с именем любого параметра callback.

Возвращаемые значения

Возвращает результат функции или false в случае возникновения ошибки.

Список изменений

ВерсияОписание
8.0.0 Ключи параметра args теперь интерпретируются как имена параметров, а не игнорируются.

Примеры

Пример #1 Пример использования функции call_user_func_array()

<?php
function foobar($arg, $arg2) {
echo
__FUNCTION__, " got $arg and $arg2\n";
}
class
foo {
function
bar($arg, $arg2) {
echo
__METHOD__, " got $arg and $arg2\n";
}
}


// Вызываем функцию foobar() с 2 аргументами
call_user_func_array("foobar", array("one", "two"));

// Вызываем метод $foo->bar() с 2 аргументами
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>

Вывод приведённого примера будет похож на:

foobar got one and two foo::bar got three and four

Пример #2 Пример использования call_user_func_array() c именем пространства имён

<?php

namespace Foobar;

class
Foo {
static public function
test($name) {
print
"Hello {$name}!\n";
}
}

call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));

call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Philip'));

?>

Вывод приведённого примера будет похож на:

Hello Hannes! Hello Philip!

Пример #3 Использование лямбда-функции

<?php

$func
= function($arg1, $arg2) {
return
$arg1 * $arg2;
};

var_dump(call_user_func_array($func, array(2, 4)));

?>

Результат выполнения приведённого примера:

int(8)

Пример #4 Передача значений по ссылке

<?php

function mega(&$a){
$a = 55;
echo
"function mega \$a=$a\n";
}
$bar = 77;
call_user_func_array('mega',array(&$bar));
echo
"global \$bar=$bar\n";

?>

Результат выполнения приведённого примера:

function mega $a=55 global $bar=55

Пример #5 Пример использования call_user_func_array() с именованными аргументами

<?php
function foobar($first, $second) {
echo
__FUNCTION__, " получает $first и $second\n";
}

// Вызов функции foobar() с именованными аргументами в непозиционном порядке
call_user_func_array("foobar", array("second" => "two", "first" => "one"));

// Вызов функции foobar() с одним именованным аргументом
call_user_func_array("foobar", array("foo", "second" => "bar"));

// Неисправимая ошибка: Невозможно использовать позиционный аргумент после именованного аргумента
call_user_func_array("foobar", array("first" => "one", "bar"));

?>

Вывод приведённого примера будет похож на:

foobar получает one и two foobar получает foo и bar Fatal error: Uncaught Error: Cannot use positional argument after named argument

Примечания

Замечание:

Callback-функции, зарегистрированные такими функциями как call_user_func() и call_user_func_array(), не будут вызваны при наличии не пойманного исключения, брошенного в предыдущей callback-функции.

Смотрите также

To Top