实际应用中,对一个变量做判断的情况是非常常见的。所以这一组函数我们就不得不去学习以下几个重要的:
empty — 检查一个变量是否为空
第四章第8节讲过,非常重要,应用场景非常多。
intval — 获取变量的整数值
上一节讲过,和floor的功能一样。
is_array — 检测变量是否是数组
is_null — 检测变量是否为 NULL
is_numeric — 检测变量是否为数字或数字字符串
例如:表单里填一个数字,提交到服务器接收的是一个数字字符串,所以用is_numeric可以判断表单提交过来的是不是数字。
isset — 检测变量是否设置
第四章第8节讲过,非常重要,应用场景非常多。
unset — 释放给定的变量
第四章第8节讲过,删除一个变量。重要!
var_dump — 打印变量的相关信息
常用于调试程序出错。楠神已把它打包成ln_dump函数了。
接下来讲一下四个特别重要的函数:
我们在文本文档里输入各种字符,哪怕只有数字字符,
PHP从文本文档里读取这些字符,始终会把它当成字符串数据('123456')处理。反之也是这样一个道理,文本文档里只能储存字符串。不光是储存到文本文档,像表单提交的数据都是字符串,像第三方平台的接口,向它请求返回来的也都是字符串数据。在计算机的世界里,数据类型有很多种,但是媒介之间、软件之间、平台之间相互交流,好像只能用字符串这一种数据类型,字符串相当于数据类型界的“英语”。
那问题来了,我们现在已学习了六种PHP数据类型(字符串型、整数型、浮点型、布尔型、null型、数组),我们怎么把下面这个数组存到文本文件里。
确切地说,能不能把数组“翻译”成字符串?答案是——有!看下面这一对函数:
serialize — 产生一个可存储的值的表示
unserialize — 从已存储的表示中创建 PHP 的值
第14行,serialize($arr)作用是:把一个数组变量序列化了,变成了一个字符串。(这一节我们先不研究怎么往文件里写字符串数据)
第16行,unserialize($a)作用是:把序列化的字符串成功转换回PHP变量。
再来看这一对函数:
json_encode — 对变量进行 JSON 编码
json_decode — 对 JSON 格式的字符串进行编码
第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格式化。刚学编程的朋友可能不了解,对数据做字符串处理的应用场景是很多的,而数据大多又以数组类型出现。比如说把常用的数据缓存到文件里,以字符串的类型写到数据库里。