PHP的打印语句

环境

  • PHP 8.4.5

总结

如果不想看详细介绍,可以直接看总结。

打印语句

  • echo
    • 最常用,最推荐的打印语句
    • 不是函数,括号可有可无(个人建议不加括号)
    • 可以打印多个值,用逗号分隔
  • print
    • 不是函数,括号可有可无(个人建议不加括号)
    • 总是返回 1
    • 只能打印一个值
    • 性能略差于 echo
  • print_r
    • 调试常用
    • 特别适合打印数组、对象等复杂的数据结构
    • 若把第二个参数设置为true,则并不打印,而是返回要打印的内容(字符串)
  • var_dump
    • 调试常用
    • print_r 显示更多详细信息,比如数据类型、字符串长度,等等
    • 没有返回值
    • 可以打印多个值,用逗号分隔

换行符

  • 命令行
    • PHP_EOL (推荐)
    • \n
    • 字符串本身跨行
  • 网页
    • <br> (或者 <br/>
    • nl2br() 结合 PHP_EOL\n
    • <pre>...</pre> 结合 PHP_EOL\n

nl2br()<pre>...</pre> 的区别:

  • 前者会把行尾的空格转(若有多个)换为1个空格,把行首的空格都去掉,而后者会保留所有空格
  • 前者是plain text,后者是等宽字体

<pre>...</pre> 有点像markdown里的引用代码(严格保留缩进格式,使用等宽字体)。

括号

echoprint 不是函数,括号可有可无。个人建议不要加括号,因为括号非但不起作用,反而会误导人。

数组(对象)和字符串之间的相互转换

  • json_encode :把对象或者数组转换为JSON格式的字符串
  • json_decode :把JSON格式的字符串转换为对象或者数组
  • implode :把数组元素连接成一个字符串
  • explode :把字符串分割为数组

打印语句

PHP常见的打印语句有:

  • echo
  • print
  • print_r
  • var_dump

下面详细介绍一下。

echo

echo 是最简单的打印语句。

echo "Hello World";

或者

echo("Hello World");

关于有没有括号的区别,下面会有详细介绍。

注意:echo语句的输出结果不会自动换行。比如:

echo("abc");
echo("def");
  • 在命令行下输出:
PS C:\xampp\htdocs> php test1.php
abcdef
  • 在网页上输出:

在这里插入图片描述

如果需要换行的话,在命令行下和网页下的方法有所不同。

要在命令行输出换行,推荐使用 PHP_EOL

echo("abc" . PHP_EOL ."def");

或者也可以用 \n (兼容性没有 PHP_EOL 好):

echo("abc\ndef");

还有一种方法是直接在字符串里换行:

echo("abc
def");

注:单引号和双引号都可以。

上面这几种换行方式只对命令行有效,在页面里,它们只会转化为一个空格,比如:

在这里插入图片描述

要想在页面上实现换行,需要使用 <br> (或 <br/> )标签:

echo("abc<br>def");

或者使用 nl2br() 来转换:

echo(nl2br("abc\ndef"));

echo(nl2br("abc" . PHP_EOL . "def"));

或者使用 <pre>...</pre> 来保留格式:

echo("<pre>abc\ndef</pre>");

echo("<pre>abc" . PHP_EOL . "def</pre>");

对于 <pre>...</pre> ,字体会有些不太一样:

在这里插入图片描述

而且 <pre>...</pre> 会保留行首和行尾的空格。

echo语句可以打印多个值,用逗号分隔,比如:

echo "abc", "def";

输出结果里, abcdef 是连着的。

注:不能用括号的方式打印多个值。

print

printecho 很类似,区别在于:

  • print 有返回值 1 ,而 echo 没有返回值(但是有返回值又有什么用呢?)
  • print 无法打印多个值
  • print 性能略低于 echo (但差别不大)

总之,推荐使用 echo

括号

echoprint 不是函数,而是语言结构,所以括号不是必需的。

事实上,括号可能会产生意想不到的作用,看下面的代码:

print ("A") && print ("B");

运行结果是什么?

看起来,输出结果似乎应该如下:

AB

但其实并不是这样,实际上输出结果为:

B1

这是为什么呢?

原因在于, print 并不是函数,括号其实是不起作用的,完全可以移除。也就是说,上面的代码就相当于:

print "A" && print "B";

根据优先级,该代码也就相当于:

print ("A" && print "B"); // 括号并不起作用,只是为了方便表示优先级

所以,会先打印出 B ,然后再打印出 1 (也就是true)。

问题是,这样的代码:

print ("A") && print ("B");

迷惑性太大了。

由此看来, echoprint 语句最好还是别加括号了,因为括号不但不起作用,反而会误导人。

print_r

print_rprint 的区别在于,它特别适合打印数组、对象等复杂的数据结构。

$person = ["name" => "Tom", "age" => 25];

print_r($person);

输出结果如下:

Array
(
    [name] => Tom
    [age] => 25
)

print($person) 结果如下:

PHP Warning:  Array to string conversion in C:\xampp\htdocs\test1.php on line 5
PHP Stack trace:
PHP   1. {main}() C:\xampp\htdocs\test1.php:0
Array

可见,PHP报了一个warning,然后只打印出了 Array 的字样。

另一个区别在于, print_r 可以有第二个参数,是 bool 类型的,默认值是false。如果设置为true,则并不实际打印,而是返回一个字符串,也就是原本要输出的内容。

print_r 非常适合调试复杂数据(比如数组、对象)。

var_dump

var_dumpprint_r 类似,区别在于 var_dump 能够显示更多详细信息,比如数据类型、字符串长度,等等。

$person = ["name" => "Tom", "age" => 25];

var_dump($person);

输出结果如下:

array(2) {
  'name' =>
  string(3) "Tom"
  'age' =>
  int(25)
}

另外, var_dump 的参数可以是多个,和 echo 类似。

var_dump 没有返回值。

数组(对象)和字符串之间的转换

json_encode

把对象或者数组转换为JSON格式的字符串。

$person = ["name" => "张三", "age" => 25];

$str = json_encode($person);

echo $str;

输出结果如下:

{"name":"\u5f20\u4e09","age":25}

常用选项:

  • JSON_PRETTY_PRINT :完美打印(比如换行、缩进等)
  • JSON_UNESCAPED_UNICODE :不转义 Unicode 字符,使中文等非 ASCII 字符能正确显示

比如:

$person = ["name" => "张三", "age" => 25];

$str = json_encode($person, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

echo $str;

输出结果如下:

{
    "name": "张三",
    "age": 25
}

json_decode

将JSON格式的字符串转换为数组或对象。

$str = '{"name":"张三","age":25}';

$x = json_decode($str);

echo gettype($x) . PHP_EOL; // object

echo $x->name;

输出结果如下:

object
张三

本例中,把JSON字符串转换为PHP对象。

第二个参数表示是否转换为关联数组,默认值是false,如果设置为true:

$str = '{"name":"张三","age":25}';

$x = json_decode($str, true);

echo gettype($x) . PHP_EOL; // array

echo $x["name"];

输出结果如下:

array
张三

可见,把JSON字符串转换为关联数组。

implode

把数组元素连接成一个字符串。比如:

$arr = ['apple', 'banana', 'cherry'];

$str = implode(', ', $arr);

echo $str; // apple, banana, cherry

如果是多维数组,就不行了:

$arr = ['a', ['b', 'c'], 'd'];

$str = implode(', ', $arr);

echo $str; // a, Array, d

implode 有个别名 join ,显然这个名字更贴切。

explode

把字符串分割为数组,比如:

$str = "apple,banana,cherry";

$arr = explode(',', $str);

print_r($arr);

输出结果如下:

Array
(
    [0] => apple
    [1] => banana
    [2] => cherry
)

注意:对于空字符串( '' ), explode 会返回一个包含空字符串的数组 ['']

考一考

关联数组 $arr1 定义如下:

$arr1 = ["name"=>"张三", "age"=>25, "city"=>"北京"];

现在需要调试代码,分别要在命令行和页面上打印 $arr1 的内容,该如何打印?

答:对于命令行,可以直接用 print_r 或者 var_dump 来打印。

  • print_r
print_r($arr1);

输出结果如下:

Array
(
    [name] => 张三
    [age] => 25
    [city] => 北京
)
  • var_dump
var_dump($arr1);

输出结果如下:

array(3) {
  ["name"]=>
  string(6) "张三"
  ["age"]=>
  int(25)
  ["city"]=>
  string(6) "北京"
}

对于网页,用 print_r 或者 var_dump 来打印的话,不会自动换行:

在这里插入图片描述

为了方便浏览,可以转化成JSON格式,然后用 <pre>...</pre> 来保持格式:

$x = json_encode($arr1, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

echo "<pre>{$x}</pre>";

在这里插入图片描述

注意:此时应该用 <pre>...</pre> ,而不应该用 nl2br() ,因为后者不会保留格式:

在这里插入图片描述

注意缩进没了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值