PHP中printf()函数的用途是什么?

Dav*_*ard 13 php printf

这似乎是一个非常愚蠢的问题,但是printf()PHP中存在该函数的原因是什么?

在我看来,使用echo将获得完全相同的结果,额外的好处是,如果你在一行输出几个变量,你不会感到困惑(是的,你可以使用%1$s而不是只是%s,但它仍然可以获取所有声明的几个变量的messey).

我知道你也可以定义变量的类型,而不需要在输出字符串之前修改它,但对我来说似乎不足以创建一个函数.

也许我错了,也许我错过了一些明显的东西,但是如果有人可以帮助我理解为什么它存在(这样我就知道我是否应该真的使用它!)我会批评它.谢谢.

Adr*_*tti 10

echo是语言构造,printf是一种功能.这意味着你将无法以echo同样的方式使用printf.

这不仅仅是个人口味

查看两个功能的手册页:

这里讨论了这个主题,例如,你不能echo用变量函数调用.此外,他们获得和管理输入的方式也不同.如果你不需要你提供的参数FORMATTINGprintf应该使用echo(它稍微快一些).

例子

我再次坚持一些关键词:格式化功能.使用printf不是连接字符串或从占位符构建字符串,而是使用自定义格式(可能来自配置,用户输入或其他任何内容)来完成.

我写了一些代码来解释我的意思(我发布的链接中的原始来源).

此代码无效,echo不是函数,因此它不会返回打印值(您可以使用printsprintf为此但print不提供字符串连接).

($some_var) ? echo 'true' : echo 'false';
Run Code Online (Sandbox Code Playgroud)

下面的代码打印一个格式化的字符串,在这种情况下,格式来自文字变量,但它可能来自(例如)GET请求或其他任何内容.你可以用echo配置中的格式字符串重写它吗?

%format = "%'.-15.15s%'.6.6s\n";
printf($format, $heading1, $value1);
Run Code Online (Sandbox Code Playgroud)


Jer*_*oen 8

printf()是C的printf()函数的一个端口,所以有背景编写C代码的人更熟悉语法并且更喜欢它.然而,大多数以PHP开头的人都觉得它很混乱.

为了比较:

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
        mysql_real_escape_string($user),
        mysql_real_escape_string($password));
Run Code Online (Sandbox Code Playgroud)

(我使用了sprintf(),它与printf相同,但它实际上不会打印字符串,只是返回它)


$query = "SELECT * FROM users WHERE user='" . mysql_real_escape_string($user) . "' AND password='" . mysql_real_escape_string($password) . "'";
Run Code Online (Sandbox Code Playgroud)

这只是一个偏好的问题!

  • 这不是个人品味,它们具有不同目的的完全不同的功能. (4认同)
  • @Jeroen在2012年引用2004年微优化基准测试*并非*有帮助. (2认同)