Comment travailler avec les arguments infinity dans une fonction (comme isset de PHP())

Vous savez comment PHP isset() peut accepter des arguments multiples (Pas de limite non plus)?

Comme je peux le faire:

isset($var1,$var2,$var3,$var4,$var5,$var6,$var7,$var8,$var9,$var10,$var11);
//etc etc

Comment pourrais-je faire cela dans ma propre fonction? Comment pourrais-je travailler avec infinity arguments passés?

Comment font-ils?

23
demandé sur Waleed Khan 2012-08-28 22:07:14

4 réponses

func_get_args faire ce que vous souhaitez:

function infinite_parameters() {
    foreach (func_get_args() as $param) {
        echo "Param is $param" . PHP_EOL;
    }
}

vous pouvez aussi utiliser func_get_arg pour obtenir un paramètre spécifique (c'est le zéro-indexé):

function infinite_parameters() {
    echo func_get_arg(2);
}

mais faites attention de vérifier que vous avez ce paramètre:

function infinite_parameters() {
    if (func_num_args() < 3) {
        throw new BadFunctionCallException("Not enough parameters!");
    }
}

Vous pouvez même mélanger func_*_arg et les paramètres réguliers:

function foo($param1, $param2) {
    echo $param1; // Works as normal
    echo func_get_arg(0); // Gets $param1
    if (func_num_args() >= 3) {
        echo func_get_arg(2);
    }
}

Mais avant de l'utiliser, pensez à savoir si vous vraiment voulez avoir des paramètres indéfinis. Serait pas un tableau suffit-il?

52
répondu Waleed Khan 2012-08-28 18:15:56

à partir de PHP 5.6 vous pouvez utiliser le token"..."

Exemple:

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

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

Source: http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

26
répondu Marcel Burkhard 2014-11-04 13:44:55

Vous pouvez utiliser func_get_args(), il retournera un tableau d'arguments.

function work_with_arguments() {
    echo implode(", ", func_get_args());
}

work_with_arguments("Hello", "World");
//Outputs: Hello, World
2
répondu Madara Uchiha 2012-08-28 18:09:35

appel func_get_args() à l'intérieur de votre fonction retournera un tableau des arguments passés à PHP.

1
répondu Lucas Green 2012-08-28 18:09:38