PHP输出语句(echo、print、printf和sprintf)
PHP 输出函数包括 echo() 函数与 print() 函数,以及格式化输出 printf() 函数和 sprintf() 函数。
下面罗列了字符串的 3 种输出方法:
经过测试,在 echo() 函数中,用逗号来连接字符串的方式要比直接使用圆点连接字符串更快。
【实例 1】用圆点输出 echo 变量。
【实例 2】交换顺序用圆点输出 echo 变量。
【实例 3】用逗号输出 echo 变量。
【实例 4】交换顺序用逗号输出 echo 变量。
在【实例 1】中,在代码“echo '1+5' . 1+5;”中加上括号 ["echo('1+5' . 1)+5;"],得到的结果是一样的,这证明 PHP 是先连接字符串再按照从左向右的顺序进行加法计算。既然是先连接字符串,则应该是"1+51",再为这个字符串增加 5,那为什么会输出 6 呢?
上述内容与 PHP 中的字符串变成数字的机制相关,来看下述例子:
回到上文中的“1+5”,既然这个字符串是“1+5”,所以强制进行类型转换后应为 1,在此基础上加上 5,结果当然为 6。
为了证明上文中的猜想,以下述例子来进行验证:
如上文所述,echo 会先对每个参数进行计算,然后进行字符串连接,最后输出,所以使用逗号不会出现上述问题。
print() 函数有返回值,其返回值为 1,当其执行失败时返回 0。
【实例】print() 函数的应用。
如果把上述 print() 函数中的圆点换成逗号,得到运行结果为:
根据上述内容可以总结出 echo() 函数和 print() 函数之间的区别,如下表所示:
格式化字符串包括两部分内容:
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样,各参数之间用“,”分开,且顺序一一对应,否则会出现令人意想不到的错误。
常用类型转换符如下:
【实例】 分别使用数字 20 的“%d”格式和“%f”格式,输出“这本书20元”的文本
【实例】使用sprintf()函数输出
PHP 中的 sprintf() 函数和 printf() 函数的用法和 C语言中的 printf() 函数非常相似,经常使用 sprintf() 函数将十进制数转换成其他进制数。
【实例】使用 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() | 有返回值 | 只能使用圆点 | 1 或者 0 |
PHP printf()函数
print() 函数和 echo() 函数均可输出指定的文字、变量和返回值,但是其输出结果是没有格式的,printf() 函数的返回值是字符串长度,只是简单的文字形式。下面介绍 printf() 函数,该函数可以格式化输出。格式化字符串包括两部分内容:
- 一部分是正常字符,这些字符将按原样输出;
- 另一部分是格式化规定字符,以“%”开始,后跟一个或几个规定字符,用于确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样,各参数之间用“,”分开,且顺序一一对应,否则会出现令人意想不到的错误。
常用类型转换符如下:
- %b:整数转换为二进制数;
- %c:整数转换为ASCII码;
- %d:整数转换为有符号十进制数;
- %f:倍精度型转换为浮点型;
- %o:整数转换为八进制数;
- %s:整数转换为字符串;
- %u:整数转无符号十进制数;
- %x:整数转十六进制数(小写);
【实例】 分别使用数字 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
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。