php用isset()判断变量是否定义的存在的坑

在写php程序时,我们通常用isset()来检测变量是否定义,但其中存在一个问题,看手册上对该方法的描述:

bool isset ( mixed $var [, mixed $... ] )

检测变量是否设置,并且不是 NULL

如果已经使用 unset() 释放了一个变量之后,它将不再是 isset() 。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE 。同时要注意的是一个 NULL 字节("\0")并不等同于 PHP 的 NULL 常数。

If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered. 


也就是被初始化成 NULL的变量,用改方法检测时也会返回false,例如:

<?php

$var = null;
$arr['key'] = null;

if(isset($var)){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}

if(isset($arr['key'])){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}


运行结果:

no set
no set

当然这种情况是比较少见的,我们平时在初始化变量时尽量避免NULL,但有时在取数据库时无可避免的取回NULL,这种情况我们可以用array_key_exists()函数来判断某个字段是否被取出来了,比如:

<?php

$arr['key'] = null;

if(array_key_exists('key' , $arr)){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}

if(array_key_exists('key2' , $arr)){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}


运行结果:

set
no set


bool array_key_exists ( mixed $key , array $search )

array_key_exists() 在给定的 key 存在于数组中时返回 TRUE key 可以是任何能作为数组索引的值。 array_key_exists() 也可用于对象。 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值