这似乎是一个非常愚蠢的问题,但是printf()PHP中存在该函数的原因是什么?
在我看来,使用echo将获得完全相同的结果,额外的好处是,如果你在一行输出几个变量,你不会感到困惑(是的,你可以使用%1$s而不是只是%s,但它仍然可以获取所有声明的几个变量的messey).
我知道你也可以定义变量的类型,而不需要在输出字符串之前修改它,但对我来说似乎不足以创建一个函数.
也许我错了,也许我错过了一些明显的东西,但是如果有人可以帮助我理解为什么它存在(这样我就知道我是否应该真的使用它!)我会批评它.谢谢.
Adr*_*tti 10
echo是语言构造,printf是一种功能.这意味着你将无法以echo同样的方式使用printf.
这不仅仅是个人口味
查看两个功能的手册页:
这里讨论了这个主题,例如,你不能echo用变量函数调用.此外,他们获得和管理输入的方式也不同.如果你不需要你提供的参数FORMATTINGprintf应该使用echo(它稍微快一些).
我再次坚持一些关键词:格式化和功能.使用printf不是连接字符串或从占位符构建字符串,而是使用自定义格式(可能来自配置,用户输入或其他任何内容)来完成.
我写了一些代码来解释我的意思(我发布的链接中的原始来源).
此代码无效,echo不是函数,因此它不会返回打印值(您可以使用print或sprintf为此但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)
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)
这只是一个偏好的问题!
| 归档时间: |
|
| 查看次数: |
9700 次 |
| 最近记录: |