为什么sprintf()没有输出任何内容?

18

我以前从未使用过这些函数,但是在阅读了很多有关sprintf()的内容后,我决定应该学习一下它。

所以我继续做了以下操作。

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());

它不输出任何内容。而使用printf()函数:

printf(currentDateTime());

它可以成功地打印结果。那么这两个函数之间的区别是什么,我该如何正确使用sprintf()函数呢?

3个回答

60

sprintf() 返回一个字符串,printf() 将其显示在屏幕上。

以下两个是相等的:

printf(currentDateTime());
print sprintf(currentDateTime());

24
我通过想着“静默的printf()”来记住它 :) - deed02392
@deed02392,那个s不是代表“字符串”吗? - Pacerier
不行,因为 printf() 也输出一个字符串。 - mickmackusa

15

sprintf()将结果打印到一个字符串中,printf()则将其打印到标准输出中,例如:

printf(currentDateTime());

等同于:

echo sprintf(currentDateTime());

6

sprintf()函数返回一个字符串,而printf()函数输出一个字符串。因此你需要像下面这样进行操作:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接