第六章:第5节 PHP内置函数——与变量相关函数、json与序列化

更新于:2021-05-12 17:03:46

实际应用中,对一个变量做判断的情况是非常常见的。所以这一组函数我们就不得不去学习以下几个重要的:


1.png


empty检查一个变量是否为空


第四章第8节讲过,非常重要,应用场景非常多。


intval获取变量的整数值


上一节讲过,和floor的功能一样。


is_array检测变量是否是数组


is_null检测变量是否为 NULL


is_numeric检测变量是否为数字或数字字符串 


例如:表单里填一个数字,提交到服务器接收的是一个数字字符串,所以用is_numeric可以判断表单提交过来的是不是数字。

1.png

1.png


isset检测变量是否设置


第四章第8节讲过,非常重要,应用场景非常多。


unset释放给定的变量


第四章第8节讲过,删除一个变量。重要!


var_dump打印变量的相关信息


常用于调试程序出错。楠神已把它打包成ln_dump函数了。


接下来讲一下四个特别重要的函数:


我们在文本文档里输入各种字符,哪怕只有数字字符,


1.png


PHP从文本文档里读取这些字符,始终会把它当成字符串数据('123456')处理。反之也是这样一个道理,文本文档里只能储存字符串。不光是储存到文本文档,像表单提交的数据都是字符串,像第三方平台的接口,向它请求返回来的也都是字符串数据。在计算机的世界里,数据类型有很多种,但是媒介之间、软件之间、平台之间相互交流,好像只能用字符串这一种数据类型,字符串相当于数据类型界的“英语”。


那问题来了,我们现在已学习了六种PHP数据类型(字符串型、整数型、浮点型、布尔型、null型、数组),我们怎么把下面这个数组存到文本文件里。


1.png

确切地说,能不能把数组“翻译”成字符串?答案是——!看下面这一对函数:


serialize产生一个可存储的值的表示 


unserialize从已存储的表示中创建 PHP 的值


1.png

1.png

第14行,serialize($arr)作用是:把一个数组变量序列化了,变成了一个字符串。(这一节我们先不研究怎么往文件里写字符串数据)


第16行,unserialize($a)作用是:把序列化的字符串成功转换回PHP变量。


再来看这一对函数:

1.png


json_encode对变量进行 JSON 编码


json_decode对 JSON 格式的字符串进行编码


1.png

1.png

第18行,json_encode($arr)把数组变量进行json编码。

【注意:中文汉字被json编码后变成了Unicode编码,解决方案《PHP解决json编码中文变成Unicode问题》】


第20行,json_decode($b,true)把JSON 格式的字符串转换回 PHP 变量。


一个是序列化,一个是json格式化,它俩都有什么区别?


从通用上:

serialize序列化后的字符串只能被PHP转回,其他语言不识别。

json格式是通用的一种标准,其他语言也能识别。所以json数据格式是最常用的数据交换、传输格式。


从长度上:

序列化后的长度肯定比json格式化的长,因为序列化后对数据有长度记录,从图片中的数据可以看出来。所以序列化后的数据更占空间。


从可读性上:

序列化后的数据不宜读,json格式化的数据可读。


从编码上:

json只能用于UTF-8编码的数据,所以需要额外注意:

json_encode($str) 有时候处理后的数据是null,一定要检查下PHP文件是不是utf-8编码。


从使用范围上:

我们后面不是还有两种数据类型没学到嘛,资源类型谁都处理不了,对象类型可以被序列化,却不能被json格式化。


从速度上:

序列化可能要快点吧,毕竟它对数据有长度描述。还是跟数据有关系,速度上不是绝对的序列化最快。如果要处理的数据不是特别多,速度方面是可以忽略的。


总结:如果把数据(不包括对象)做字符串处理,推荐用json格式化。刚学编程的朋友可能不了解,对数据做字符串处理的应用场景是很多的,而数据大多又以数组类型出现。比如说把常用的数据缓存到文件里,以字符串的类型写到数据库里。


本节学习代码》》》