PHP Conference Japan 2024

vfprintf

(PHP 5, PHP 7, PHP 8)

vfprintf将格式化字符串写入流

描述

vfprintf(资源 $stream, 字符串 $format, 数组 $values): int

根据format生成的字符串写入由stream指定的流资源。

其功能与fprintf()相同,但接受一个参数数组,而不是可变数量的参数。

参数

stream

format

格式字符串由零个或多个指令组成:直接复制到结果中的普通字符(不包括%)和转换说明符,每个转换说明符都会获取它自己的参数。

转换说明符遵循此原型:%[argnum$][flags][width][.precision]specifier

Argnum

后跟美元符号$的整数,用于指定转换中要处理的参数编号。

Flags
标志 描述
- 在给定的字段宽度内左对齐;右对齐为默认值
+ 在正数前加正号+;默认情况下,只有负数前加负号。
(空格) 用空格填充结果。这是默认值。
0 仅用零左填充数字。对于s说明符,这也可以用零右填充。
'(字符) 用字符(char)填充结果。

宽度

一个整数,表示此转换应产生的字符数(最小值),或*。如果使用*,则宽度作为附加整数提供,该整数位于说明符格式化的整数之前。

精度

句点.,后跟一个整数或*(可选),其含义取决于说明符

  • 对于eEfF说明符:这是要在小数点后打印的位数(默认为6)。
  • 对于gGhH说明符:这是要打印的有效数字的最大数量。
  • 对于s说明符:它充当截止点,为字符串设置最大字符限制。

注意如果指定了句点而不为精度指定显式值,则假定为0。如果使用*,则精度作为附加整数提供,该整数位于说明符格式化的整数之前。

说明符
说明符 描述
% 文字百分号字符。不需要参数。
b 参数被视为整数,并以二进制数表示。
c 参数被视为整数,并以该ASCII码的字符表示。
d 参数被视为整数,并以(带符号)十进制数表示。
e 参数被视为科学记数法(例如1.2e+2)。
E 类似于e说明符,但使用大写字母(例如1.2E+2)。
f 参数被视为浮点数,并以浮点数表示(区域设置感知)。
F 参数被视为浮点数,并以浮点数表示(非区域设置感知)。
g

通用格式。

设P等于精度(如果非零),如果省略精度则为6,如果精度为零则为1。然后,如果使用E样式的转换具有X的指数

如果P > X ≥ −4,则转换使用f样式和精度P − (X + 1)。否则,转换使用e样式和精度P − 1。

G 类似于g说明符,但使用Ef
h 类似于g说明符,但使用F。从PHP 8.0.0开始可用。
H 类似于g说明符,但使用EF。从PHP 8.0.0开始可用。
o 参数被视为整数,并以八进制数表示。
s 参数被视为字符串并表示为字符串。
u 参数被视为整数,并以无符号十进制数表示。
x 参数被视为整数,并以十六进制数表示(使用小写字母)。
X 参数被视为整数,并以十六进制数表示(使用大写字母)。

警告

c类型说明符忽略填充和宽度。

警告

尝试将字符串和宽度说明符组合与每个字符需要多个字节的字符集一起使用可能会导致意外结果。

变量将被强制转换为适合说明符的类型

类型处理
类型 说明符
字符串 s
整数 ducoxXb
浮点数 eEfFgGhH

values

返回值

返回输出字符串的长度。

错误/异常

从PHP 8.0.0开始,如果参数数量为零,则抛出ValueError。在PHP 8.0.0之前,会发出E_WARNING

从PHP 8.0.0开始,如果[width]小于零或大于PHP_INT_MAX,则抛出ValueError。在PHP 8.0.0之前,会发出E_WARNING

从PHP 8.0.0开始,如果[precision]小于零或大于PHP_INT_MAX,则抛出ValueError。在PHP 8.0.0之前,会发出E_WARNING

从PHP 8.0.0开始,当提供的参数少于所需参数时,会抛出ValueError。在PHP 8.0.0之前,会返回false并发出E_WARNING

变更日志

版本 描述
8.0.0 此函数不再在失败时返回false
8.0.0 如果参数数量为零,则抛出ValueError;以前此函数会发出E_WARNING
8.0.0 如果[width]小于零或大于PHP_INT_MAX,则抛出ValueError;以前此函数会发出E_WARNING
8.0.0 如果[precision]小于零或大于PHP_INT_MAX,则抛出ValueError异常;之前此函数会发出E_WARNING警告。
8.0.0 如果提供的参数少于所需参数,则抛出ValueError异常;之前此函数会发出E_WARNING警告。

示例

示例 #1 vfprintf(): 零填充整数

<?php
if (!($fp = fopen('date.txt', 'w')))
return;

vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
// 将格式化的 ISO 日期写入 date.txt
?>

参见

添加注释

用户贡献注释

此页面没有用户贡献的注释。
To Top