PHP получить все аргументы в виде массива? - PullRequest
33 голосов
/ 06 мая 2009

Эй, я работал с функцией PHP, которая принимает несколько аргументов и форматирует их. В настоящее время я работаю с чем-то вроде этого:

function foo($a1 = null, $a2 = null, $a3 = null, $a4 = null){
    if ($a1 !== null) doSomethingWith($a1, 1);
    if ($a2 !== null) doSomethingWith($a2, 2);
    if ($a3 !== null) doSomethingWith($a3, 3);
    if ($a4 !== null) doSomethingWith($a4, 4);
}

Но мне было интересно, могу ли я использовать такое решение:

function foo(params $args){
    for ($i = 0; $i < count($args); $i++)
        doSomethingWith($args[$i], $i + 1);
}

Но все равно вызывайте функцию таким же образом, как и ключевое слово params в C # или массив arguments в JavaScript.

Ответы [ 3 ]

70 голосов
/ 06 мая 2009

func_get_args возвращает массив со всеми аргументами текущей функции.

9 голосов
/ 16 апреля 2015

Если вы используете PHP 5.6+, теперь вы можете сделать это:

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

источник: http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

7 голосов
/ 05 декабря 2016

Или с PHP 7.1 теперь вы можете использовать подсказку типа iterable

function f(iterable $args) {
    foreach ($args as $arg) {
        // awesome stuff
    }
}

Кроме того, его можно использовать вместо Traversable при выполнении итерации с использованием интерфейса. А также он может быть использован в качестве генератора, который выдает параметры.

Документация

...