Pasando la lista de argumentos variables a sprintf ()
-
05-07-2019 - |
Pregunta
Me gustaría escribir una función que (entre otras cosas) acepte un número variable de argumentos y luego los pase a sprintf ().
Por ejemplo:
<?php
function some_func($var) {
// ...
$s = sprintf($var, ...arguments that were passed...);
// ...
}
some_func("blah %d blah", $number);
?>
¿Cómo hago esto en PHP?
Solución
function some_func() {
$args = func_get_args();
$s = call_user_func_array('sprintf', $args);
}
// or
function some_func() {
$args = func_get_args();
$var = array_shift($args);
$s = vsprintf($var, $args);
}
La variable temporal $ args
es necesaria, ya que func_get_args
no se puede usar en la lista de argumentos de una función en versiones de PHP anteriores a 5.3.
Otros consejos
utilice una combinación de func_get_args
y call_user_func_array
function f($var) { // at least one argument
$args = func_get_args();
$s = call_user_func_array('sprintf', $args);
}
use $ numargs = func_num_args (); y func_get_arg (i) para recuperar el argumento
Aquí está el camino:
http: //www.php .net / manual / es / functions.arguments.php # functions.variable-arg-list
básicamente, declara su función como de costumbre, sin parámetros, luego llama a func_num_args () para averiguar cuántos argumentos le pasaron, y luego obtiene cada uno llamando a func_get_arg () o func_get_args (). Eso es fácil :)