php踩过的那些坑 isset()详解

Posted phpfensi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php踩过的那些坑 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)

 

以上是关于php踩过的那些坑 isset()详解的主要内容,如果未能解决你的问题,请参考以下文章

php踩过的那些坑 数据类型转换

php踩过的那些坑浮点数计算

php踩过的那些坑 strpos引发的血案

那些年我们踩过的 Flink 坑系列

那些年我们踩过的 Flink 坑系列

那些年我们踩过的 Flink 坑系列