这节学习几个跟变量有关系的函数:
var_dump:
在手册里有详细介绍,可以查看一个变量是什么数据类型,这个函数不用于写业务逻辑、业务功能,它主要是帮我们写代码时起调试作用。这个函数是非常有用的,可以同时查看多个函数。
效果:
unset:
unset其实不能算一个函数,它只是一个PHP语句,它没有返回值,它的作用是删除一个变量。
效果:
变量$v3被unset以后,就变成了空值NULL。
拓展:
$test = "aaa"; $abc = &$test; unset($test); echo $abc;
结果打印$abc的值是“aaa”。
原因是:变量$test指向内存(应该是堆内存)中的一个区域(假设是A区域,这个区域用来表示“aaa”值),$test引用传值给$abc,同时两个变量指向A区域,unset删除的只是$test变量,而并不是A区域,所以$abc的值还是“aaa”。
什么是NULL?
null也是PHP的一种数据类型,顾名思义是空的意思,什么都没有。
通过C语言我们来了解NULL。在C语言里,有种变量类型叫指针变量,它的值存的是内存地址,一个指针变量被赋值NULL,这个变量存的内存地址是0x00000000,一个不能被使用的地址。PHP变量被赋值NULL,其实就是引用赋值,给它赋值0x00000000的内存地址。
在下列情况下一个变量被认为是 NULL
:
被赋值为 NULL。
尚未被赋值。
被 unset()。
null 类型只有一个值,就是大小写不敏感的关键字 NULL(你可以写成NULL,也可以写成null)。
empty:
主要用它检测一个变量是否为空,返回值是布尔值。为空返回真true,不为空返回假false。
empty严格意义上也不算一个函数,它只能检测一个变量,不能直接检测字符串、数字或函数返回值。
效果:
20行报了一个错误,把20行注释掉
都是布尔值false,三个变量都不是空。
楠神说下什么样的数据empty才会被认定为空:
整数型和浮点型等于0会被认为空,其他为不空
字符串''会被认为空,其他为不空
布尔型false会被认为空,其他为不空
空类型NULL会被认为空
empty配合if判断语句,在业务逻辑上用得很多。
isset:
isset和empty有很多相似的地方,它检测一个变量是否设置,返回布尔值。设置了返回真,没设置返回假。
isset严格意义上也不算一个函数,它只能检测一个变量,不能直接检测字符串、数字或函数返回值。
怎么样变量才算被设置?主要是看变量是不是等于NULL值,一个变量没有被定义赋值,被unset了,它就算没有被设置。变量等于0或者false,也算是被设置。
看效果:
在PHP手册附录有个php类型比较表:
在程序功能开发时,empty常用于判断变量的值是不是等于0,是不是空字符;isset常用于判断有没有这个变量。
额外说明:empty、isset函数的参数只能是变量,楠神在开发过程中发现一个有意思的现象,举个例子:
isset( explode('|','1|2|s')[2] );empty、isset这样去检测一个函数的返回值就不会报错。
因为楠神还没讲到数组,有很多人看不懂上面的代码。explode('|','1|2|s')是一个函数,它的返回值是数组,explode('|','1|2|s')[2]返回数组中下标为2的值。
现在看不懂没关系,后边学完数组就很容易明白什么意思了。
gettype:
获取一个变量的类型名称,结果是一个单词,这个函数其实用的不多,用法很简单,不做详细介绍了。