概要
- 了解php打印函数种类,简单实用以及功能区别
- 总结各个打印函数的实用场景以及相关最佳实践
函数介绍
1. echo
- echo用于输出一个或者多个字符串, 不换行
- 如果输出对象非字符串,会尝试将对象转成字符串, 转化失败则抛出异常
- echo属于语法结构,而非函数
- 使用
-
<?php
-
class Cls1 {
-
}
-
class Cls2 {
-
public function __toString() {
-
return 'Cls2';
-
}
-
}
-
echo "111"; // '111'
-
//数字类型转成string
-
echo 111; // '111'
-
//输出bool类型true被转成'1' , false转成''
-
echo true ; // '1'
-
echo false; // ''
-
//输出对象,尝试调用对象__toString方法将对象序列化
-
echo (new Cls1); // error: class Cls1 could not be converted to string
-
echo (new Cls2); // 'Cls2'
-
//输出输出多个变量(非字符串类型会被尝试转成字符串)
-
echo 22, "11", new Cls2; // '2211Cls2'
2. print
- print 属于语法结构,而非函数 (同echo)
- print 一次只能接受一个字符串(区分与echo)
- 其他效果同echo
- 使用
-
<?php
-
print 'hello world';
3. print_r()
- 用于 打印关于变量的易于理解的信息。(不包括变量类型信息)
- 对于对象, 打印所有属性(public, protected, private)
- 一次仅允许打印一个变量(区别于echo)
- 使用
-
<?php
-
class Cls1 {
-
public $var1 = 111;
-
protected $var2 = 222;
-
private $var3 = 333;
-
public function func() {}
-
}
-
$s = "111";
-
$n = 1;
-
$b = false;
-
$f = 1.1222;
-
$o = new Cls1();
-
$arr = ['1' => 1, "3", 5, $o];
-
print_r($s); // '111'
-
print_r($n); // 1
-
print_r($b); // ''
-
print_r($f); // 1.1222
-
print_r($arr);
-
/*
-
Array
-
(
-
[1] => 1
-
[2] => 3
-
[3] => 5
-
[4] => Cls1 Object
-
(
-
[var1] => 111
-
[var2:protected] => 222
-
[var3:Cls1:private] => 333
-
)
-
)
-
*/
-
print_r($o);
-
/*
-
Cls1 Object
-
(
-
[var1] => 111
-
[var2:protected] => 222
-
[var3:Cls1:private] => 333
-
)
-
*/
4. var_dump
- 一个或多个表达式的结构信息 (print_r只打印一个表达式)
- 输出包括 类型 与值(print_r() 不显示类型)
- 使用
-
<?php
-
class Cls1 {
-
public $var1 = 111;
-
protected $var2 = 222;
-
private $var3 = 333;
-
public function func() {}
-
}
-
$s = "111";
-
$n = 1;
-
$b = false;
-
$f = 1.1222;
-
$o = new Cls1();
-
$arr = ['1' => 1, "3", 5, $o];
-
var_dump($s); // string(3) "111"
-
var_dump($n); // int(1)
-
var_dump($b); // bool(false)
-
var_dump($f); // float(1.1222)
-
var_dump($arr);
-
/*
-
array(4) {
-
[1]=>
-
int(1)
-
[2]=>
-
string(1) "3"
-
[3]=>
-
int(5)
-
[4]=>
-
object(Cls1)#1 (3) {
-
["var1"]=>
-
int(111)
-
["var2":protected]=>
-
int(222)
-
["var3":"Cls1":private]=>
-
int(333)
-
}
-
}
-
*/
-
var_dump($o);
-
/*
-
object(Cls1)#1 (3) {
-
["var1"]=>
-
int(111)
-
["var2":protected]=>
-
int(222)
-
["var3":"Cls1":private]=>
-
int(333)
-
}
-
*/
-
var_dump($s, $n, $b, $f);
-
/*
-
string(3) "111"
-
int(1)
-
bool(false)
-
float(1.1222)
-
*/
5. 其他
-
<?php
-
$n = 11;
-
$s = "22";
-
$f = "22";
-
printf("%d%s%f", $n, $s, $f); // 112222.000000
-
$s2 = sprintf("%d%s%f", $n, $s, $f);
-
echo $s2; // 112222.000000
最佳实践 (服务调试)
- 不使用print, 可用echo 替代
- 由于echo只能输出简单的字符串,需要了解变量详细信息不用echo, 建议使用print_r(), var_dump() (个人更偏爱var_dump)
- 调试信息输出到浏览器, 尝试添加
echo '<pre>';
产生更友好的信息显示