我试图了解更多关于PHP函数sprintf(),但php.net没有帮助我,因为我仍然困惑,为什么要使用它?
看看下面的例子。
为什么用这个:
$output = sprintf("Here is the result: %s for this date %s", $result, $date);
当这样做是一样的,更容易写IMO:
$output = 'Here is the result: ' .$result. ' for this date ' .$date;
我是不是遗漏了什么?
即使我认为同样的事情,除非我最近使用它。当您根据用户输入生成文档时,这将很方便。
"<p>Some big paragraph ".$a["name"]." again have tot ake care of space and stuff .". $a["age"]. "also would be hard to keep track of punctuations and stuff in a really ".$a["token"]. paragarapoh.";
WHich可以很容易地写成
sprintf("Some big paragraph %s. Again have to take care of space and stuff.%s also wouldnt be hard to keep track of punctuations and stuff in a really %s paragraph",$a,$b,$c);
我发现的最好的理由是,它允许你把所有的语言字符串放在你的语言文件中,人们可以根据需要翻译和排序它们-但你仍然知道,无论字符串的格式是什么-你希望显示用户的名字。
例如,您的网站会在页面顶部显示“欢迎返回[[User]]”。作为程序员,你不知道或不关心UI人员将如何编写它——你只知道用户名将显示在消息中的某个地方。
因此,您可以将消息嵌入到代码中,而不必担心该消息实际上是什么。
只需文件 (EN_US):
...
$lang['welcome_message'] = 'Welcome back %s';
...
然后,通过在实际的php代码中使用它,就可以支持任何语言的任何类型的消息。
sprintf($lang['welcome_message'], $user->name())
即使我认为同样的事情,除非我最近使用它。当您根据用户输入生成文档时,这将很方便。
"<p>Some big paragraph ".$a["name"]." again have tot ake care of space and stuff .". $a["age"]. "also would be hard to keep track of punctuations and stuff in a really ".$a["token"]. paragarapoh.";
WHich可以很容易地写成
sprintf("Some big paragraph %s. Again have to take care of space and stuff.%s also wouldnt be hard to keep track of punctuations and stuff in a really %s paragraph",$a,$b,$c);
Sprintf()非常类似于printf()。如果您了解printf()的详细信息,那么sprintf()甚至vsprintf()都不难理解。
sprintf()与printf()的一个不同之处在于,您需要声明一个变量来捕获函数的输出,因为它不直接打印/回显任何内容。让我们看看下面的代码片段:
printf("Hello %s", "world"); // "Hello world"
sprintf("Hello %s", "world"); // does not display anything
echo sprintf("Hello %s", "world"); // "Hello world"
$a = sprintf("Hello %s", "world"); // does not display anything
echo $a;// "Hello world"
希望这能有所帮助。
使用sprintf()函数而不是普通连接的优点是,您可以对要连接的变量应用不同类型的格式。
在你的情况下,你做到了
$output = sprintf("Here is the result: %s for this date %s", $result, $date);
and
$output = 'Here is the result: ' .$result. ' for this date ' .$date;
让我们输入$result = 'passed';日期= '23 ';
使用普通的连接,你只能得到输出:
Here is the result: passed for this date 23rd
然而,如果你使用sprintf(),你可以得到一个修改后的输出,如:
$output = sprintf('Here is the result: %.4s for this date %.2s',$result,$date);
echo $output;
输出:
Here is the result: pass for this date 23