您好!欢迎访问家园网-www.jy.wang!

家园网

PHP的printf()是干什么的?使用场景是什么?底层原理是什么?

网络 作者:本站 点击:

详细的可以参考官方文档:https://www.php.net/manual/zh/function.printf.php


printf() 是 PHP 中的一个内置函数,用于格式化并输出字符串。它类似于 C 语言中的 printf 函数,可以将变量插入到字符串中,并按照指定的格式进行输出。printf() 函数在多种场景中都非常有用,特别是在需要精确控制输出格式的情况下。

1. printf() 的用途

1.1 格式化输出

printf() 允许你将变量插入到字符串中,并按照指定的格式进行输出。

这对于生成格式化的文本、日志记录、调试信息等非常有用。

1.2 控制输出精度

你可以使用 printf() 来控制浮点数的精度、日期和时间的格式等。

2. 使用场景

2.1 日志记录

在日志文件中记录带有格式的信息,例如时间戳、错误代码等。

<?php
$logFile = fopen('log.txt', 'a');
$timestamp = date('Y-m-d H:i:s');
$errorMessage = 'An error occurred';
fprintf($logFile, "[%s] %s\n", $timestamp, $errorMessage);
fclose($logFile);
?>


2.2 调试信息

在调试过程中,输出带有格式的变量值。

<?php
$number = 123.456789;
printf("The number is: %.2f\n", $number); // 输出: The number is: 123.46
?>


2.3 生成报告

生成格式化的报告,例如财务报表、统计报告等。

<?php
$name = "John Doe";
$amount = 1234.56;
printf("Name: %-20s Amount: %10.2f\n", $name, $amount);
// 输出: Name: John Doe              Amount:     1234.56
?>


3. 底层原理

3.1 格式化字符串

printf() 接受一个格式化字符串作为第一个参数,该字符串包含普通字符和格式化指令。

格式化指令以 % 开头,后面跟着一个或多个字符,指定如何格式化后续的参数。

3.2 格式化指令

常见的格式化指令包括:

%d 或 %i:整数

%f:浮点数

%s:字符串

%c:字符

%e:科学计数法表示的浮点数

%u:无符号整数

%.n:指定小数点后的位数

%-n:左对齐

%+n:右对齐

3.3 参数替换

printf() 会按照格式化字符串中的指令顺序,依次替换后续的参数。

例如,printf("Name: %s, Age: %d", $name, $age) 会将 $name 替换到第一个 %s,将 $age 替换到第一个 %d。

4. 示例代码

4.1 基本用法

<?php
$name = "Alice";
$age = 30;
printf("Name: %s, Age: %d\n", $name, $age);
// 输出: Name: Alice, Age: 30
?>


4.2 浮点数格式化

<?php
$number = 123.456789;
printf("The number is: %.2f\n", $number);
// 输出: The number is: 123.46
?>


4.3 字符串对齐

<?php
$name = "Bob";
$amount = 1234.56;
printf("Name: %-20s Amount: %10.2f\n", $name, $amount);
// 输出: Name: Bob                    Amount:     1234.56
?>


5. 注意事项

格式化字符串:确保格式化字符串中的指令数量与后续参数的数量匹配,否则会导致错误。

性能:在高频率输出的场景中,考虑性能影响,避免过度使用 printf()。

安全性:避免在格式化字符串中使用用户输入,以防止格式字符串注入攻击。


总结

printf() 函数在 PHP 中用于格式化并输出字符串,特别适用于需要精确控制输出格式的场景,如日志记录、调试信息和生成报告。通过理解格式化指令和参数替换的机制,你可以灵活地使用 printf() 来满足各种需求。


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                        

原文链接:https://blog.csdn.net/qq_36777143/article/details/143740676


在PHP中,printf是一个用于格式化输出的函数。它接受一个格式字符串作为参数,并根据格式字符串中的占位符来替换相应的值。printf函数可以用于将变量的值以指定的格式输出到屏幕或文件中。

printf函数的格式字符串可以包含普通的文本字符和特殊的格式占位符。格式占位符以百分号(%)开头,后面跟着一个或多个格式指示符,用于指定输出的格式。常用的格式指示符包括:

%s:用于输出字符串。

%d或%i:用于输出整数。

%f:用于输出浮点数。

%c:用于输出字符。

%b:用于输出二进制数。

%o:用于输出八进制数。

%x或%X:用于输出十六进制数。

%e或%E:用于输出科学计数法表示的浮点数。

%u:用于输出无符号整数。

除了格式指示符,格式字符串还可以包含其他控制字符,如转义字符(\n表示换行)、制表符(\t表示制表符)等。

使用printf函数可以方便地控制输出的格式,使输出更加清晰易读。它在PHP中被广泛应用于调试和日志记录等场景。


printf()函数优点在于可以格式化输出!


格式如下:%['padding_character][-][width][.precision]type
      所有的转换说明都是以%开始,如果想打印一个%符号,必须用%%.
      参数'padding_character是可选.它将被用来填充变量直至所指定的宽度.该参数的作用就在变量前面填充.默认的填充字符是一个空格,如果指定0或者空格,就不需要 ' 单引号作为前缀,其他字符就必须指定 ' 作为前缀.
     参数 - 是可选.它指左对齐,默认是右对齐.
     参数width是指被替换的变量的长度.
     参数precision表示以小数点开始.它指明小数点后要显示的位数.
     参数type 是类型码,请看下表:


类型   |   含义
b       |    解释为整数并作为二进制输出.
c        |    解释为整数并作为字符表示输出(ASCII码).
d        |   解释为整数并作为整数输出.
f         |   解释为双精度并作为浮点数输出.
o        |   解释为整数并作为八进制数输出.
s        |   解释为字符串并为字符串输出.
u        |   解释为整数并作为非指定小数输出.
x        |    解释为整数并作为带有小写字母a-f的十六进制数输出
X       |   解释为整数并作为带有大写字母A-F的十六进制数输出

 

演示:
---------------------------------------------------------------------------------------------

$str = "0758 jian";
$strA = "A";
$strB = "B";
$num1 = 5;
$num2 = 5;
$num3 = 0.25;
$num4 = 3.2567;
$num5 = 8;
$num6 = 1.735;
$num7 = 16777215;
$num8 = 16777215;
printf("%2\$s %1\$s", $strA, $strB); // 2\$是指定参数位置
echo '
';
printf("填充: %'%10s", $str); //指定填充符为%字符串宽度为10
echo '
';
printf("二制制: %b", $num1);
echo '
';
printf("ASCII码: %c", $num2);
echo '
';
printf("整数: %d", $num3);
echo '
';
printf("浮点数: %.2f", $num4);
echo '
';
printf("八进制: %o", $num5);
echo '
';
printf("字符串: %s", $str);
echo '
';
printf("非小数: %u", $num6);
echo '
';
printf("十六进制: %x", $num7);
echo '
';
printf("十六进制: %X", $num8);
?>


---------------------------------------------------------------------------------------------
输出结果:
---------------------------------------------------------------------------------------------

B A
填充: %0758 jian
二制制: 101
ASCII码:
整数: 0
浮点数: 3.26
八进制: 10
字符串: 0758 jian
非小数: 1
十六进制: ffffff
十六进制: FFFFFF


今天给大家带来一篇深入剖析php中printf()函数格式化使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望对大家有所帮助。

printf()函数优点在于可以格式化输出!

printf的格式控制的完整格式:

% - 0 m.n l或h 格式字符

下面对组成格式说明的各项加以说明:

立即学习PHP免费学习笔记(深入)”;

①%:表示格式说明的起始符号,不可缺少。

②-:有-表示左对齐输出,如省略表示右对齐输出。

③0:有0表示指定空位填0,如省略表示指定空位不填。

④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。

⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

---------------------------------------
格式字符

格式字符用以指定输出项的数据类型和输出格式。

①d格式:用来输出十进制整数。有以下几种用法:

%d:按整型数据的实际长度输出。

%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。

%ld:输出长整型数据。

②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。

例:

main() 
{ int a = -1; 
printf("%d, %o", a, a); 
}

运行结果:-1,177777

程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。

③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。

④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。

⑤c格式:输出一个字符。

⑥s格式:用来输出一个串。有几中用法

%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。

%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。

%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。

%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。

%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。

⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:

%f:不指定宽度,整数部分全部输出并输出6位小数。

%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。

%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。

⑧e格式:以指数形式输出实数。可用以下形式:

%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。

%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。

⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。

---------------------------------------
关于printf函数的进一步说明:

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:

printf("%f%%", 1.0/3);

输出0.333333%。

---------------------------------------
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.

对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.

printf 是 PHP 中用于格式化字符串的一个函数

  1. %s - 字符串格式 用法:printf("%s", "Hello, World!"); 输出:Hello, World!

  2. %d - 十进制整数格式 用法:printf("%d", 42); 输出:42

  3. %f - 浮点数格式 用法:printf("%f", 3.14); 输出:3.140000

  4. %e - 科学计数法表示的浮点数格式 用法:printf("%e", 2.71828); 输出:2.718280e+00

  5. %x - 十六进制表示的整数格式 用法:printf("%x", 255); 输出:ff

  6. %o - 八进制表示的整数格式 用法:printf("%o", 10); 输出:12

  7. %b - 二进制表示的整数格式 用法:printf("%b", 10); 输出:1010

  8. %c - 字符格式 用法:printf("%c", 65); 输出:A

  9. %u - 无符号十进制整数格式 用法:printf("%u", 4294967295); 输出:4294967295

  10. %I - 无符号八进制整数格式 用法:printf("%I", 10); 输出:12

  11. %o - 无符号八进制整数格式(与 %u 类似,但用于八进制) 用法:printf("%o", 10); 输出:12

  12. %x - 无符号十六进制整数格式 用法:printf("%x", 4294967295); 输出:ffffffff

  13. %X - 无符号十六进制整数格式(大写字母) 用法:printf("%X", 4294967295); 输出:FFFFFFFF

  14. %p - 指针格式 用法:$ptr = (int*)0x12345678; printf("%p", $ptr); 输出:0x12345678

  15. %% - 百分比符号格式 用法:printf("%%s", "Hello, World!"); 输出:%s

这些格式化选项可以组合使用,例如:printf("%d %f %e", 42, 3.14, 2.71828);,输出:42 3.140000 2.718280e+00


标签: