首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在PHP中使用sprintf函数?

为什么在PHP中使用sprintf函数?
EN

Stack Overflow用户
提问于 2009-09-06 20:09:38
回答 18查看 81.6K关注 0票数 208

我正在尝试学习更多关于PHP函数sprintf()的知识,但是php.net对我帮助不大,因为我仍然很困惑,你为什么要使用它呢?

看看我下面的例子。

为什么要使用这个:

代码语言:javascript
复制
$output = sprintf("Here is the result: %s for this date %s", $result, $date);

如果这样做是相同的,并且更容易编写IMO:

代码语言:javascript
复制
$output = 'Here is the result: ' .$result. ' for this date ' .$date;

我是不是漏掉了什么?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2009-09-06 20:13:37

sprintf具有原始printf的所有格式化功能,这意味着您可以执行比在字符串中插入变量值更多的操作。

例如,指定数字格式(十六进制、十进制、八进制)、十进制数、填充等。在谷歌上搜索printf,你会发现很多例子。wikipedia article on printf应该可以让您入门了。

票数 142
EN

Stack Overflow用户

发布于 2009-09-06 20:20:51

sprintf有很多用例,但我使用它们的一种方式是在数据库中存储字符串:'Hello,我的名字是%s‘,或者作为PHP类中的常量。这样,当我想要使用该字符串时,我可以简单地这样做:

代码语言:javascript
复制
$name = 'Josh';
// $stringFromDB = 'Hello, My Name is %s';
$greeting = sprintf($stringFromDB, $name);
// $greetting = 'Hello, My Name is Josh'

从本质上讲,它允许在代码中进行一些分隔。如果我在代码中的许多地方使用'Hello,My Name is %s‘,我可以在一个地方将其更改为'%s is my name’,它会自动更新所有其他地方,而不必转到每个实例并移动连接。

票数 81
EN

Stack Overflow用户

发布于 2015-07-22 17:11:33

使用sprintf()格式化字符串更加简洁和安全。

例如,当您处理输入变量时,它通过预先指定预期的格式(例如,您期望的是字符串%s或数字%d)来防止意外。这可能有助于潜在的SQL injection风险,但它不能防止字符串包含引号。

它还有助于处理浮点数,您可以显式指定数字精度(例如%.2f),这将使您不必使用转换函数。

另一个优点是,大多数主流编程语言都有自己的sprintf()实现,所以一旦您熟悉了它,就更容易使用它,而不是学习一门新语言(比如如何连接字符串或转换浮点数)。

总而言之,为了让代码更干净、更易读,这是一个很好的实践。

例如,请参阅以下real example

代码语言:javascript
复制
$insert .= "('".$tr[0]."','".$tr[0]."','".$tr[0]."','".$tr[0]."'),";

或者一些简单的打印示例,例如'1','2','3','4'

代码语言:javascript
复制
print "foo: '" . $a . "','" . $b . "'; bar: '" . $c . "','" . $d . "'" . "\n";

并使用格式化字符串打印:

代码语言:javascript
复制
printf("foo: '%d','%d'; bar: '%d','%d'\n", $a, $b, $c, $d);

其中,printf()等同于sprintf(),但它输出一个格式化字符串,而不是(将其返回给变量)。

哪一个更具可读性?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1386593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档