[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли передать аргументы в функцию из массива
tamat
Доброй ночи!

Название получилось корявое, но лучше не придумалось)
Вот смотрите. Есть функция
function foo($a, $b, $c)
{
echo $a . $b . $c;
}

И есть массив, в котором содержатся аргументы для этой функции
$vars = array('cat', 'dog', 'sheep');

Можно как-нибудь запустить эту функцию с этими значениями так, чтобы напрямую их не вставлять?
Т. е. можно ли написать какой-то универсальный код, который сможет зная название функции запустить её с аргументами, которые прилагаются в массиве? Т. е. этот код должен уметь запускать разные функции с разным количеством аргументов.

Когда яваскрипт передает серверу данные для сохранения, то очень долго каждой переменной присваивать имя, потом писать это имя при защите переменной, потом писать это имя при передачи аргументов в функцию. Легче яваскриптом все запихать в простой массив, передать его серверу, потом его кинуть функции, которая все эти переменные разом защитит, и, зная название конечной функции, вызовет её, подставив все аргументы. Можно сделать, конечно, чтобы ф-ция foo сразу принимала массив, но это будет как-то не очень красиво.

Вообщем что-то типа того
$args = '';
foreach ($vars as $value)
{
...
}
В итоге
$args = "'cat','dog','sheep'";

foo($args);
win!


Только
foo("'cat','dog','sheep'");

не пашет, функция думает, что ей передают только один аргумент из трех.





waldicom
http://php.net/manual/en/function.func-get-args.php ?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
tamat
Я немного не понял, при чем тут функция func_get_args? Она вызывается из тела вызванной функции, а я как раз-таки и спрашиваю, как эту вызванную функцию вызвать)

$vars1 = array('cat', 'dog', 'sheep');

function foo1($a, $b, $c)
{
echo $a . $b . $c;
}


$vars2 = array('car', 'bus');

function foo2($a, $b)
{
echo $a . $b;
}


И есть функция
function foo3($array, $function_name)
{
...
}

f003($vars1, 'foo1'); --> вызовет foo1('cat', 'dog', 'sheep');
f003($vars2, 'foo2'); --> вызовет foo1('car', 'bus');

Главный вопрос: можно ли из массива сформировать строку с аргументами и передать её функции так, чтобы она это съела? Если можно, то как?



Joker
call_user_func_array

function foo($a, $b, $c)
{
echo $a . $b . $c;
}

$vars = array('cat', 'dog', 'sheep');

$result = call_user_func_array('foo',$vars);


вот так это делается)
tamat
оо, оказывается, всё уже давно придумано) Спасибо)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.