PHP 输出字符串
本文最后更新于:2024年3月18日 凌晨
PHP 输出字符串
- 有4种方法可以向浏览器发送输出内容,echo结构让你一次输出许多值,而
print()
只能输出一个值,printf()
函数通过把值插入到模板中来建立一个格式化的字符串,print_r()
函数利于调试–它用更容易读懂的方式来打印数组,对象和其他东西的内容。
echo
- 要把一个字符串放到PHP生成的HTML页面中,可以使用echo,echo的大部分行为看起来像是一个函数,但其实echo是一个语言结构(language construct),这意味着可以省略小括号,所以下面两个语句是等价的:
1 2
| echo "Printy"; echo ("Printy");
|
1
| echo "First","second","third";
|
- 在尝试echo多个值时,使用小括号会产生语法错误:
- 因为echo并不是真正的函数,所以不可以把它作为表达式的一部分使用:
1 2 3 4
| if(echo("test")){ echo ("it worked"); }
|
- 通过使用函数
print()
或printf()
,很容易补救这种错误。
print()
- 函数
print()
发送一个值(它的参数)给浏览器,如果字符串成功显示则返回ture,否则返回false(例如,用户在页面提交之前按下stop按钮):
1 2 3 4 5
| if(!print("Hello,World"){ die("you 're not listening to me!"); }
Hello,World
|
printf()
- 函数
printf()
通过把值传入到模板中(即定义好的字符串格式)来输出一个字符串,它源自在标准C库中的同名函数。
printf()
的第一个参数时格式字符串,剩下的参数是要替换进来的值,在格式字符串中的每个字符%指定一个替换。
格式修饰符
- 在模板中的每一个替换标记由一个百分号
%
组成,后面可能跟着一个在下面列表中的修饰符,并以类型说明符结尾(在输出中使用%%
得到一个百分号)修饰符必须按下面列出的次序出现:
- 填充说明符说明该字符用于填充结果,使结果为适当大小的字符串,规定0,一个空白符或其他任意以单引号作为前缀的字符,默认用空白符填充。
- 一个符号,符号在字符串和数字上的作用是不同的,对于字符串,负号
-
强制字符串向左对齐(默认是向右对齐),对于数字,正号+
强制正数和开始的加号一起打印(例如,35被打印为+35
)
- 这个元素包含字符的最小数目,如果结果小于字符的数目,正负号和填充说明符将决定如何填充到这个长度。
- 浮点数的精确性说明符由一个小数点和数字组成,这个说明符规定了小数点后多少位可以被显示,对于其他非双精度的类型,这个说明符将被忽略。
类型说明符
- 类型说明符告诉
printf()
什么样的数据类型将被替换。这决定了对前面列出的修饰符的解释,在下表中列出了这8种类型。
说明符 |
意义 |
B |
参数是整数并且以二进制数显示 |
C |
参数是整数并且显示值对应的字符 |
D |
参数是整数并且以十进制数显示 |
e or f |
参数是双精度型并且以浮点数显示 |
G |
参数是双精度型(double with precision)并且以浮点数显示 |
O |
参数是整型并且以八进制(以8为基数)数显示 |
S |
参数是字符串并且显示为字符串 |
U |
参数是无符号整数并且以十进制数显示 |
x |
参数是整数并且以十六进制(以16为基数)数显示,使用小写字母 |
X |
参数是整数并且以十六进制数显示,使用大写字母 |
- 函数
printf()
对于不是C程序员的人来说看起来非常复杂,然而一旦习惯之后,会发现它是一个强大的格式化工具,下面是一些例子:
- 将一个浮点数转换成只有两位小数的小数:
1 2 3
| printf('%.2f',27.452);
27.15
|
1 2 3
| printf('The hex value of %d is %x',214,214);
The hex value of 214 is d6
|
1 2 3
| printf('Bond.James Bond.%03d.',7);
Bond.James Bond.007
|
1 2 3
| printf('%02d/%02d/%04d',$mouth,$day,%year);
02/15/2005
|
1 2 3
| printf('%.2f%%Completed',2.1);
2.10% Completed
|
1 2 3
| print('You\'ve spent $%5.2f so far ',4.1);
You've spent $ 4.10 so far
|
- 函数
sprintf()
和printf()
的参数相同,但只是返回生成的字符串而不打印出来,这可以让你把字符串保存到一个变量中供稍后使用:
1
| $date = sprintf("%02d/%02d/%04d",$mouth,$day,$yyear);
|
print_r() and var_dump()
print_r()
结构可以聪明地显示传给它的东西,而不是像echo
和print()
那样把所有的都转换为字符串,使用print_r()
,字符串和数字都简单地打印出来,而数组则以括起来的键和值的列表形式显示,并以Array开头:
1 2 3 4 5 6 7 8 9
| $a = array('name' => 'Fred','age' => 35,'wife' => 'Wilma'); print_r($a);
Array { [name] => Fred [age] => 35 [wife] =>Wilma }
|
- 在数组中使用
print_r()
将移动内部的迭代器指针到数组里最后一个元素的位置。
- 当对一个对象使用
print_r()
时,你将会看到单词Object,之后是该对象的初始化属性,像数组一样地显示:
1 2 3 4 5 6 7 8 9 10 11
| class P{ var $name = 'nat'; } $p = new P; print_r($p);
Object ( [name] =>nat )
|
- 用
print_r
输出布尔值和NULL的结果是没有意义的:
1 2 3
| print_r(true); print_r(false); print_r(NULL);
|
- 由于这个原因,
var_dump()
比print_r()
更适合调试。
- 函数
var_dump()
以更适合阅读的格式显示任何PHP值:
1 2 3
| var_dump(true);
bool(true);
|
1 2 3
| var_dump(false);
bool(false);
|
1 2 3 4 5 6 7 8
| var_dump(array('name' => Fred,'age' =>35));
array(2){ ["name"] => string(4) "Fred" ["age"] => int(35) }
|
1 2 3 4 5 6 7 8 9 10
| class P{ var $name = 'Nat'; } $p = new P; var_dump($p);
object(p)(1){ ["name"] => string(3) "Nat" }
|
- 在递归结构中(如
$GLOBALS
有一个GLOBALS的入口指向自身)要注意print_r()
或var_dump()
的使用,var_dump()
在访问同一个元素3次后会停止,而函数print_r()
则无限循环。