Доступ к неопределенным аргументам - PullRequest
1 голос
/ 20 июля 2009

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

function doSomething($var1="", $var2="".........)
{
    // Do something with the arguments
}

Я не хочу указывать кучу аргументов. Есть ли способ просто захватить все аргументы в массиве? Даже если они не были определены? (PHP BTW)

Конечный результат должен выглядеть примерно так:

func("hello", "ya", "hi", "blah", "test", "go");

function func()
{
   //Loop Over Arguments
}

Я видел, как некоторые нативные функции PHP могут принимать, казалось бы, бесконечное количество аргументов, но могут ли пользовательские функции делать то же самое?

Ответы [ 5 ]

5 голосов
/ 20 июля 2009

Вы можете использовать func_get_args, func_get_arg и func_num_args

Учитывая, что вы объявили эти три переменные:

$param_1 = "A";
$param_2 = "B";
$param_3 = "C";

Вот первый пример использования func_get_args для получения всех параметров в одном массиве:

my_function_1($param_1, $param_2, $param_3);

function my_function_1()
{
    $num_args = func_num_args();
    if ($num_args >= 1) {
        $args = func_get_args();
        var_dump($args);
    }
}

А вот еще один, чтобы получить параметры один за другим, с func_get_arg:

my_function_2($param_1, $param_2, $param_3);

function my_function_2()
{
    $num_args = func_num_args();
    if ($num_args >= 1) {
        $args = func_get_args();
        for ($i = 0 ; $i<$num_args ; $i++) {
            var_dump(func_get_arg($i));
        }
    }
}
3 голосов
/ 20 июля 2009

См. func_get_args . Это именно то, что вы хотите

2 голосов
/ 20 июля 2009

Да, определенно есть. Проверьте func_get_args () , он должен делать именно то, что вам нужно.

0 голосов
/ 20 июля 2009

Как уже писали другие, прежде чем вы сможете использовать func_get_args(), но почему бы не попробовать передать параметры в массиве? PHP свободно набран, так что вы можете хранить в нем что угодно.

$params = array(1, 2, 'something');
doSomething($params);

function doSomething($params) {
    foreach ($params as $value) {
    // do something.
    }
}

Я предпочитаю это, потому что это делает разработчика видимым, что вы ожидаете параметры для функции, и вы все равно можете передавать столько параметров, сколько хотите, с небольшими накладными расходами через массив paramters.

0 голосов
/ 20 июля 2009

Вы можете узнать, сколько аргументов было вызвано функцией , используя func_num_args () . Затем вы можете получить каждый аргумент, указав его индекс с помощью func_get_arg (index) или все аргументы в виде массива с помощью func_get_args () .

Пример:

<code>function variable_arguments() {
    echo "This function was called with ".func_num_args()." arguments.<br />";
    echo "Those arguments were:<br /><pre>";
    echo print_r(func_get_args());
    echo "
"; } variable_arguments («Hello», 42, array (true));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...