首页 > 编程笔记 > PHP笔记 阅读:17

PHP输出语句(echo、print、printf和sprintf)

PHP 输出函数包括 echo() 函数与 print() 函数,以及格式化输出 printf() 函数和 sprintf() 函数。

PHP echo()函数

echo() 函数可以一次性输出多个字符串、HTML 标记或变量,可以使用圆括号,也可以不使用圆括号,在实际应用中一般不使用圆括号。echo() 函数更像一条语句,无返回值。

下面罗列了字符串的 3 种输出方法:
//方法1:使用逗号来输出
<?php
echo "今天天气很好","我们出去玩吧";
?>

//方法2:使用圆点来输出
<?php
echo "今天天气很好"."我们出去玩吧";
?>

//方法3:添加括号来输出
<?php
echo ("今天天气很好"."我们出去玩吧");
?>
需要注意的是,在方法 3 中,不能将括号中的圆点改为逗号,否则运行结果会出错。

经过测试,在 echo() 函数中,用逗号来连接字符串的方式要比直接使用圆点连接字符串更快。

【实例 1】用圆点输出 echo 变量。
<?php
echo '1+5='. 1+5;
?>
上述输出结果是“6”,而不是“1+5=6”。

【实例 2】交换顺序用圆点输出 echo 变量。
<?php
echo '1+5='. 5+1;
?>
运行结果为:

2

输出结果为“2”,这一结果十分奇怪,在交换 5 和 1 的位置时,输出结果就变为“2”了,为什么会这样呢?难道在 PHP 中加法没有交换律?当然不是。我们先不去思考为什么,而是将上述圆点换成逗号,再进行尝试。

【实例 3】用逗号输出 echo 变量。
<?php
echo '1+5=', 5+1;
?>
运行结果为:

1+5=6


【实例 4】交换顺序用逗号输出 echo 变量。
<?php
echo '1+5=', 1+5;
?>
运行结果为:

1+5=6

可以看出,只有使用逗号才可以得到意料之中的结果,那原因是什么呢?

在【实例 1】中,在代码“echo '1+5' . 1+5;”中加上括号 ["echo('1+5' . 1)+5;"],得到的结果是一样的,这证明 PHP 是先连接字符串再按照从左向右的顺序进行加法计算。既然是先连接字符串,则应该是"1+51",再为这个字符串增加 5,那为什么会输出 6 呢?

上述内容与 PHP 中的字符串变成数字的机制相关,来看下述例子:
echo (int)'abc1';  // 输出0
echo (int)'1abc';  // 输出1
echo (int)'2abc';  // 输出2
echo (int)'22abc'; // 输出22
从上述例子可以看出,如果将一个字符串强制转换成一个数字,PHP 会搜索该字符串的开头,如果开头是数字则进行转换,如果不是数字则直接返回 0。

回到上文中的“1+5”,既然这个字符串是“1+5”,所以强制进行类型转换后应为 1,在此基础上加上 5,结果当然为 6。

为了证明上文中的猜想,以下述例子来进行验证:
echo '5+1=' . 1+5; // 输出10
echo '5+1=' . 5+1; // 输出6
echo '1+5=' . 1+5; // 输出6
echo '1+5=' . 5+1; // 输出2
结果证明,上文中的设想是正确的。那么为什么使用逗号就不会出现上述问题呢?使用逗号代表多参数,换句话说,使用逗号进行分隔,相当于 N 个参数,即将 echo 看作函数使用。

如上文所述,echo 会先对每个参数进行计算,然后进行字符串连接,最后输出,所以使用逗号不会出现上述问题。

PHP print()函数

print() 函数输出一个或多个字符串,可以使用圆括号,也可以不使用圆括号,在实际应用中,一般不用圆括号。

print() 函数有返回值,其返回值为 1,当其执行失败时返回 0。

【实例】print() 函数的应用。
<?php
print("我们开始学习print函数")."<br>";
print "我们开始学习print函数"."<br>";
echo print("我们开始学习print函数")."<br>";
?>
运行结果为:

我们开始学习print函数
我们开始学习print函数
我们开始学习print函数
1


如果把上述 print() 函数中的圆点换成逗号,得到运行结果为:

Parse error: syntax error, unexpected ',' in /box/script.php on line 2


根据上述内容可以总结出 echo() 函数和 print() 函数之间的区别,如下表所示:

表:echo() 函数和 print() 函数之间的区别
函数名 有无返回值 分隔符 返回值类型
echo() 无返回值 可使用逗号或者圆点
print() 有返回值 只能使用圆点 1 或者 0

PHP printf()函数

print() 函数和 echo() 函数均可输出指定的文字、变量和返回值,但是其输出结果是没有格式的,printf() 函数的返回值是字符串长度,只是简单的文字形式。下面介绍 printf() 函数,该函数可以格式化输出。

格式化字符串包括两部分内容:
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样,各参数之间用“,”分开,且顺序一一对应,否则会出现令人意想不到的错误。

常用类型转换符如下:
【实例】 分别使用数字 20 的“%d”格式和“%f”格式,输出“这本书20元”的文本
<?php
printf("这本书%d元","20");
echo "<br>";
printf("这本书%f元","20");
echo "<br>";

echo printf("这本书%f元","20");
?>
运行结果为:

这本书20元
这本书20.000000元
这本书20.000000元21

在运行结果中,21 是 printf() 函数的返回值——字符串的长度为 21,需要使用 echo() 函数才能输出。

PHP sprintf()函数

printf() 函数的返回值是字符串长度,而 sprintf() 函数的返回值是字符串本身,因此,sprintf() 函数必须通过 echo() 函数才能输出。

【实例】使用sprintf()函数输出
<?php
echo sprintf("这本书%f元","20");
?>
运行结果为:

这本书20元

如果省略 echo() 函数,则浏览器中的输出为空。

PHP 中的 sprintf() 函数和 printf() 函数的用法和 C语言中的 printf() 函数非常相似,经常使用 sprintf() 函数将十进制数转换成其他进制数。

【实例】使用 sprintf() 函数进行进制数的转换
<?php
echo sprintf("%b","20");
?>
运行结果为:

10100

运行结果显示,将十进制的 20 转换成了二进制的 10100。

相关文章