2009-10-22 18 views
12

Vorrei scrivere una funzione che (tra le altre cose) accetta un numero variabile di argomenti e quindi li passa a sprintf().Passaggio all'elenco di argomenti variabili a sprintf()

Ad esempio:

<?php 
function some_func($var) { 
    // ... 
    $s = sprintf($var, ...arguments that were passed...); 
    // ... 
} 

some_func("blah %d blah", $number); 
?> 

Come faccio a fare questo in PHP?

risposta

21
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 variabile temporanea $args è necessario, perché func_get_args non possono essere utilizzati nella lista argomenti di una funzione nelle versioni di PHP precedenti alla 5.3 .

+0

'vsprintf' è davvero una buona idea! – knittl

+0

oh non sapevo su vsprintf. Grazie :) – Rob

+0

vsprintf fino in fondo –

0

utilizza $ numargs = func_num_args(); e func_get_arg (i) per recuperare l'argomento

0

utilizzano una combinazione di func_get_args e call_user_func_array

function f($var) { // at least one argument 
    $args = func_get_args(); 
    $s = call_user_func_array('sprintf', $args); 
} 
Problemi correlati