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);
?>call_user_func_array
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
call_user_func_array
Референца за `function.call-user-func-array.php` со подобрена типографија и навигација.
call_user_func_array
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
call_user_func_array — Повикај враќање со низа од параметри
= NULL
Ги повикува callback дадено од првиот параметар со параметрите во args.
Параметри
callback-
На callable што треба да се повика.
args-
Параметрите што треба да се предадат на враќањето, како низа.
Ако клучевите на
argsсе сите нумерички, клучевите се игнорираат и секој елемент ќе биде предаден наcallbackкако позициски аргумент, по ред.Ако некој од клучевите на
argsсе низи, тие елементи ќе бидат предадени наcallbackкако именувани аргументи, со името дадено од клучот.Фатална грешка е да има нумерички клуч во
argsсе појави по клуч од низа, или да има клуч од низа што не одговара на името на кој било параметар одcallback.
Вратени вредности
Враќа вратената вредност на враќањето, или false при грешка.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
args клучевите сега ќе се толкуваат како имиња на параметри, наместо да се игнорираат тивко.
|
Примери
Пример #1 call_user_func_array() example
<?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";
}
}
// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));
// Call the $foo->bar() method with 2 arguments
$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() користење на именскиот простор име
<?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)));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
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";
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
function mega $a=55 global $bar=55
Генератор call_user_func_array() користење именувани аргументи
<?php
function foobar($first, $second) {
echo __FUNCTION__, " got $first and $second\n";
}
// Call the foobar() function with named arguments in non-positional order
call_user_func_array("foobar", array("second" => "two", "first" => "one"));
// Call the foobar() function with one named argument
call_user_func_array("foobar", array("foo", "second" => "bar"));
// Fatal error: Cannot use positional argument after named argument
call_user_func_array("foobar", array("first" => "one", "bar"));
?>Горниот пример ќе прикаже нешто слично на:
foobar got one and two foobar got foo and bar Fatal error: Uncaught Error: Cannot use positional argument after named argument
Белешки
Забелешка:
Повиците регистрирани со функции како call_user_func() and call_user_func_array() нема да бидат повикани ако има фатена исклучок фрлен во претходен повик.
Види Исто така
- call_user_func() - Повикајте ја повратната функција дадена од првиот параметар
- ReflectionFunction::invokeArgs() - Повикува аргументи на функција
- ReflectionMethod::invokeArgs() - Повикај аргументи