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?
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?
à 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
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
appel func_get_args()
à l'intérieur de votre fonction retournera un tableau des arguments passés à PHP.