LonghornPHP 2026

call_user_func_array

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

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

Описание

function 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-функция.

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

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 1 note

up
41
sebastian dot rapetti at tim dot it
5 years ago
Using PHP 8, call_user_func_array call callback function using named arguments if an array with keys is passed to $args parameter, if the array used has only values, arguments are passed positionally.
<?php
function test(string $param1, string $param2): void
{
 echo $param1.' '.$param2;
}
$args = ['hello', 'world'];
//hello world
call_user_func_array('test', $args);
$args = ['param2' => 'world', 'param1' => 'hello'];
//hello world
call_user_func_array('test', $args);
$args = ['unknown_param' => 'hello', 'param2' => 'world'];
//Fatal error: Uncaught Error: Unknown named parameter $unknown_param
call_user_func_array('test', $args);
?>
+Добавить

AltStyle によって変換されたページ (->オリジナル) /