首页 期权学习期权知识正文

PHP isset() 和PHP empty()区别

xiaojiucai 期权知识 2020-08-17 760 0

isset()

如果 变量 存在且值非NULL,则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。

isset详细介绍(应用场景举例)

1、isset()对PHP参数判断

您可以使用 PHP isset() 来判断一个参数是否被定义,注意如果该参数为空,或者"\n"(NULL字节)使用 PHP isset() 判断之后,都会为TRUE。

<?php

$var = ''; // 这里初始参数$var='';

$var0 = FALSE // 这里初始参数为布尔FALSE

$var2 = NULL;  // 这里定义$var2=NULL,用isset()判断返回FALSE

$var3 = "\0"; // 这里是NULL字节,用isset()判断,返回TRUE,不同于NULL常数

$var4 = "blog.snsgou.com"; // 这里定义会在下面给unset掉 

if (isset($var)) {

    echo '参数$var已经设定,且值不为NULL';

}

// 参数$var已经赋值,而且值为$var='',所以会输出“参数$var已经设定” 

if (isset($var0)) {

 echo '参数$var0已经设定,且值不为NULL';

}

// 参数$var0已经赋值,而且值为$var=FALSE,所以会输出“参数$var已经设定”  

if (isset($vget)) {

 echo '参数$vget已经设定,且值不为NULL';

}

// 参数$vget根本就没有被提及过,isset($vget)返回FALSE,不会输出 

if (isset($var2)) {

echo '参数$var2已经设定,且值不为NULL';

}

// 这里是$var2虽然被设定了,但是$var2=NULL,所以isset($var2)返回FALSE,不会输出 

if (isset($var3)) {

 echo '参数$var3已经设定,且值不为NULL';

}

// 参数$var3 虽然\0 就是代表NULL字节,但是这个不是常数NULL,所以$isset("\0")返回TRUE,会输出 

unset($var4); // 这里给$var4 释放掉了

if (isset($var4)) {

echo '参数$var4已经设定,且值不为NULL';

}

// 虽然开始已经定义$var4,而且还不为NULL,但是后来又给 unset() 掉了,所以不会输出。

?>

2、PHP isset() 对数组的判断

在使用PHP数组的时候,需要判断数组的某个值是否存在也可以使用 PHP isset() 函数。

<?php
$V => array(
 'aa' => 'blog.snsgou.com',
 'bb' => array(
 'file' => 'file.snsgou.com',
 'img' => 'img.snsgou.com',
'hosts' => array(
 'blog' => 'blog.snsgou.com',
 'res' => 'res.snsgou.com'
 )
 )
);
// var_dump用于输出TRUE 或 FALSE
var_dump(isset($V['aa']));
// 数组$V 的$V['aa'] ='blog.snsgou.com'已经存在,所以输出TRUE 
var_dump(isset($V['bb']['file']));
//$V['bb']['file'] = 'file.snsgou.com' 所以输出 TRUE 
var_dump(isset($V['bb']['hosts']['blog']));
// $V['bb']['hosts']['blog']='blog.snsgou.com'所以输出TRUE 
var_dump(isset($V['bb']['hosts']['sh']));
//根据数组,根本就没有设定该项,所以输出FALSE
?>

3、PHP isset()对参数判断

很多时候我们需要对多个参数进行判断,可以使用isset(A)&&isset(A)&&isset(B)……来判断这些参数是不是都已经设定了,而且都不为NULL,对此您可以使用isset()多参数

来判断是不是都设定了。
<?php
isset($v1)&&isset($v2)&&isset($v3)……
// 等价于
isset($v1,$v2,$v3……)
?>

使用isset()判断多个参数,需要所有参数都被设定,且不为NULL,只要其中有一个参数没有被设定过,或者为NULL,那么整个isset()就为FALSE。

4、PHP isset()判断POST、POST、_GET、$_REQUEST等值

用isset() 或者empty() 判断通过表单传递来的参数是isset() 最常见的用法。

if (isset($_POST['from']) && 'snsgou.com' == $_POST['from']) {

echo '网站通过POST传递的来源是snsgou.com';

}

根据上面我们可以用isset判断多参数,在对表单传递来的值进行判断就最方便了。

<?php
// 表单传递来user用户名和 pass必须同时存在才能执行
if (isset($_POST['user'], $_POST['pass'])) {
$user=$_POST['user'];
$pass=$_POST['pass'];
echo '您填写的用户名是:',$user,';密码是:',$pass; 
}
?>

5、PHP isset($var{字符串长度}) 判断字符串长度

用PHP判断字符串是否存在或者判断字符串长度是否超过某一数字或者判断字符串长度是否为空一般使用strlen(),但是其实使用isset()性能更优越。

<?php
// 三元,等同于 if (isset($_POST['from'])) { $var = $_POST['from'];} else {$weiget = '';}
$var = isset($_POST['from']) ? $_POST['from'] : '';
// 判断$var存在,且字符串长度大于0
/* 菜鸟写法 
if (strlen($var) > 0) {
echo '$var子符长度大于0';
}
*/
 // 性能更优越的写法,判断$var第1个字符是否设定了
if (isset($var{1})) {
echo '$var字符长度大于0';
}
?>

6、PHP isset() 与 PHP empty() 的区别

很多人都拿 PHP isset() 和 PHP empty()进行比较,不过得出的结论一般都是 PHP isset() 判断这个参数是否存在,且不为NULL,即使用 PHP isset() 判断空值、0、布尔值(TRUE/FALSE)都是TRUE,而且 PHP isset() 还可以对数组进行判断。

而 PHP empty(),若变量不存在,或者变量存在且其值为""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE。

那么!empty(),就是变量存在,且值不为""、0、"0"、NULL、FALSE、array()以及var $var;

<?php
// $_POST['from'] 传递来的是一个网址,据此我们可以知道,这个值一定不为0和布尔,只能是字符串,或者空字符串,或者不存在
/* 下面写法比较常见,但是需要判断两次
if (isset($_POST['from']) && isset($_POST['from']{1})) {
 echo '$weigeti子符长度大于0';
}
*/
 
// 下面用!empty() 只需要判断一次,更加高效
if (!empty($_POST['from'])) {
echo '传递的from存在且不为空、0等';
}

虽然有时候用!empty()判断传递来的GET、GET、_POST 性能更优越,但是并不是能完全代替isset()使用,如果传递的值允许包含0、'0'或者空的时候,就不能使用!empty()判断了,否则即使传递过来了0、'0'都会被当作没有传递任何值过来。

而对于可以确定传递过来的值一定不为0、'0'、空的时候,如用户名、密码等,使用!empty() 性能更优越。

原文链接:https://www.qiquanji.com/post/8499.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。