2009-06-20 7 views
17

Je n'ai jamais utilisé ces fonctions auparavant, mais après avoir beaucoup lu sur sprintf(), j'ai décidé que je devrais apprendre à le connaître.Pourquoi sprintf() ne génère rien?

Alors je suis allé de l'avant et j'ai fait ce qui suit.

function currentDateTime() { 
    list($micro, $Unixtime) = explode(" ",microtime()); 
    $sec= $micro + date("s", $Unixtime); 
    $sec = mb_ereg_replace(sprintf('%d', $sec), "", ($micro + date("s", $Unixtime))); 
    return date("Y-m-d H:i:s", $Unixtime).$sec; 
} 

sprintf(currentDateTime()); 

Il n'imprime rien. À l'aide de la fonction printf() d'autre part:

printf(currentDateTime()); 

Il imprime le résultat très bien. Alors, quelle est la différence entre ces deux fonctions et comment utiliser correctement la fonction sprintf()?

Répondre

57

sprintf() retourne une chaîne, printf() l'affiche.

les deux suivants sont égaux:

printf(currentDateTime()); 
print sprintf(currentDateTime()); 
+24

Je me souviens en pensant '** silencieux ** 'printf()'' :) – deed02392

+0

@ deed02392 , N'est-ce pas 's' représentant" chaîne "? – Pacerier

14

sprintf() imprime le résultat en une chaîne. printf() imprime à-dire de la sortie standard:

printf(currentDateTime()); 

équivaut à:

echo sprintf(currentDateTime()); 
6

sprintf() retourne une chaîne tandis que printf() fournit en sortie une chaîne de caractères. Donc, vous auriez à faire quelque chose comme ce qui suit:

function currentDateTime() { 
    list($micro, $Unixtime) = explode(" ",microtime()); 
    $sec= $micro + date("s", $Unixtime); 
    $sec = mb_ereg_replace(sprintf('%d', $sec), "", ($micro + date("s", $Unixtime))); 
    return date("Y-m-d H:i:s", $Unixtime).$sec; 
} 

$output = sprintf(currentDateTime()); 
printf($output); 

http://www.php.net/sprintf

http://www.php.net/printf

Questions connexes