J'ai une fonction PHP qui prend un nombre variable d'arguments (à l'aide d' func_num_args()
et func_get_args()
), mais le nombre d'arguments, j'ai envie de passer à la fonction dépend de la longueur d'un tableau. Est-il possible d' appeler une fonction PHP avec un nombre variable d'arguments?
Réponses
Trop de publicités?Si vous avez vos arguments dans un tableau, vous pourriez être intéressé par l' call_user_func_array
fonction.
Si le nombre d'arguments que vous souhaitez passer dépend de la longueur d'un tableau, cela signifie probablement que vous pouvez emballer dans un tableau, et l'utiliser pour le deuxième paramètre de call_user_func_array
.
Les éléments de ce tableau vous passe va être reçu par votre fonction de différents paramètres.
Par exemple, si vous avez cette fonction :
function test() {
var_dump(func_num_args());
var_dump(func_get_args());
}
Vous pouvez emballer vos paramètres dans un tableau, comme ceci :
$params = array(
10,
'glop',
'test',
);
Et, puis, à l'appel de la fonction :
call_user_func_array('test', $params);
Ce code sera la sortie :
int 3
array
0 => int 10
1 => string 'glop' (length=4)
2 => string 'test' (length=4)
c'est à dire, 3 paramètres ; exactement comme si la fonction a été appelée de cette façon :
test(10, 'glop', 'test');
C'est maintenant possible avec PHP 5.6.x, à l'aide de l'opérateur " ... " (aussi connu comme splat opérateur dans certaines langues):
Exemple:
function addDateIntervalsToDateTime( DateTime $dt, DateInterval ...$intervals )
{
foreach ( $intervals as $interval ) {
$dt->add( $interval );
}
return $dt;
}
addDateIntervaslToDateTime( new DateTime, new DateInterval( 'P1D' ),
new DateInterval( 'P4D' ), new DateInterval( 'P10D' ) );
Dans une nouvelle Php 5.6 (actuellement en bêta), vous pouvez utiliser ... operator
au lieu d'utiliser func_get_args()
.
Donc, avec cela, vous pouvez obtenir tous les paramètres que vous passez:
function manyVars(...$params) {
var_dump($params);
}