php踩过的那些坑(1) isset()详解
前言:在日常开发中经常会遇到使用isset()函数检测一个变量是否设置,有什么需要注意的地方,今天一起来讨论一下
注:测试的php版本是5.6.22
一、前方有坑
先上代码:
$arr['a'] = NULL;
$arr['b'] = '';
$arr['c'] = 0;
$arr['d'] = 0.0;
$arr['e'] = [];
var_dump(isset($arr['a']));
var_dump(isset($arr['b']));
var_dump(isset($arr['c']));
var_dump(isset($arr['d']));
var_dump(isset($arr['e']));
运行结果是:
bool(false) bool(true) bool(true) bool(true) bool(true)
这里的坑或者疑问是:
isset就是检测一个变量是否设置,那么设置成NULL也叫设置,为啥返回false呢?
二、坑得有理
如果对isset有疑问,那说明对手册圣经还是没有看透。上手册:
定义:isset — 检测变量是否设置
用法:bool isset ( mixed $var [, mixed $... ] )
检测变量是否设置,并且不是 NULL。
如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。
其实,NULL的含义就是没有值的意思,也就是没有设置值,var_dump(isset($arr['a']));当然返回为false了。
三、防坑扩展
1.看代码:
$b = 'abcd';
var_dump(isset($b[0]));
var_dump(isset($b['0']));
结果是:
bool(true) bool(true)
这个和python的字符串有些像,在使用isset时需要注意一下。
2.如果非得想判断$arr['a’]的值是否为NULL怎么办呢?可以使用 array_key_exists()做判断。
$arr['a'] = NULL;
if(array_key_exists('a', $arr) && $arr['a']===NULL)
{
echo '值是NULL';
}
3.NULL不区分大小写,其含义是
NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。
在下列情况下一个变量被认为是 NULL:
- 被赋值为 NULL。
- 尚未被赋值。
- 被 unset()。
上回给的题目,大伙没给出答案,现在改为选择题:
$a = '123b';
$b = '12a';
var_dump($a<$b);
请问这段代码的运行结果是:
A、bool(true)
B、bool(false)