http://blog.snsgou.com/post-775.html
一、举例说明
A.如何判断一个变量是否定义?
04 |
$isset = isset( $test ) ? "test is define!" : "test is undefine!" ; |
05 |
echo "isset:$isset" , '<br />' ; |
07 |
$empty = ! empty ( $test ) ? "test is define!" : "test is undefine!" ; |
08 |
echo "empty:$empty" , '<br />' ; |
10 |
$is_null = is_null ( $test ) ? "test is define!" : "test is undefine!" ; |
11 |
echo "is_null:$is_null" ; |
测试结果是:
isset:test is undefine!
empty:test is undefine!
is_null:test is define!
结果表明:empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!
B、看下各自接收的参数是什么?
isset函数参数:
3 |
echo isset( $test ),isset(100), $isset ( $b =100); |
输出:
<br />
<b>Parse error</b>: parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />
empty函数参数:
3 |
echo empty ( $test ), empty (100), empty ( $b =100); |
输出:
<br />
<b>Parse error</b>: parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />
is_null函数参数:
3 |
echo is_null ( $test ), is_null (100), is_null ( $b =100); |
运行结果:没有任何错误。
结果表明:empty,isset输入参数必须是一个变量(PHP变量是以$字符开头的),而is_null输入参数只要是能够有返回值就可以(常量,变量,表达式等)。在PHP手册里面,对于他们解析是:empty,isset 是一个语言结构而非函数,因此它无法被变量函数调用。
二、概括总结isset,empty,is_null区别:
empty()
如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var、未定义,以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
isset()
如果 变量 存在且值非NULL,则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。
is_null()
检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】。
empty(), is_null(), isset()真值表(区别)
![](https://images.cnblogs.com/cnblogs_com/52linux/359783/o_php_empty_is_null_isset.jpg)
三、isset详细介绍(应用场景举例)
1、isset()对PHP参数判断
您可以使用 PHP isset() 来判断一个参数是否被定义,注意如果该参数为空,或者"\n"(NULL字节)使用 PHP isset() 判断之后,都会为TRUE。
06 |
$var4 = "blog.snsgou.com" ; |
09 |
echo '参数$var已经设定,且值不为NULL' ; |
15 |
echo '参数$var0已经设定,且值不为NULL' ; |
21 |
echo '参数$vget已经设定,且值不为NULL' ; |
27 |
echo '参数$var2已经设定,且值不为NULL' ; |
33 |
echo '参数$var3已经设定,且值不为NULL' ; |
40 |
echo '参数$var4已经设定,且值不为NULL' ; |
2、PHP isset() 对数组的判断
在使用PHP数组的时候,需要判断数组的某个值是否存在也可以使用 PHP isset() 函数。
03 |
'aa' => 'blog.snsgou.com' , |
05 |
'file' => 'file.snsgou.com' , |
06 |
'img' => 'img.snsgou.com' , |
08 |
'blog' => 'blog.snsgou.com' , |
09 |
'res' => 'res.snsgou.com' |
16 |
var_dump(isset( $V [ 'aa' ])); |
19 |
var_dump(isset( $V [ 'bb' ][ 'file' ])); |
22 |
var_dump(isset( $V [ 'bb' ][ 'hosts' ][ 'blog' ])); |
25 |
var_dump(isset( $V [ 'bb' ][ 'hosts' ][ 'sh' ])); |
3、PHP isset()对参数判断
很多时候我们需要对多个参数进行判断,可以使用isset($A)&&isset($B)……来判断这些参数是不是都已经设定了,而且都不为NULL,对此您可以使用isset()多参数来判断是不是都设定了。
2 |
isset( $v1 )&&isset( $v2 )&&isset( $v3 )…… |
使用isset()判断多个参数,需要所有参数都被设定,且不为NULL,只要其中有一个参数没有被设定过,或者为NULL,那么整个isset()就为FALSE。
4、PHP isset()判断$_POST、$_GET、$_REQUEST等值
用isset() 或者empty() 判断通过表单传递来的参数是isset() 最常见的用法。
1 |
if (isset( $_POST [ 'from' ]) && 'snsgou.com' == $_POST [ 'from' ]) { |
2 |
echo '网站通过POST传递的来源是snsgou.com' ; |
根据上面我们可以用isset判断多参数,在对表单传递来的值进行判断就最方便了。
3 |
if (isset( $_POST [ 'user' ], $_POST [ 'pass' ])) { |
6 |
echo '您填写的用户名是:' , $user , ';密码是:' , $pass ; |
5、PHP isset($var{字符串长度}) 判断字符串长度
用PHP判断字符串是否存在或者判断字符串长度是否超过某一数字或者判断字符串长度是否为空一般使用strlen(),但是其实使用isset()性能更优越。
04 |
$var = isset( $_POST [ 'from' ]) ? $_POST [ 'from' ] : '' ; |
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;
11 |
if (! empty ( $_POST [ 'from' ])) { |
12 |
echo '传递的from存在且不为空、0等' ; |
虽然有时候用!empty()判断传递来的$_GET、$_POST 性能更优越,但是并不是能完全代替isset()使用,如果传递的值允许包含0、'0'或者空的时候,就不能使用!empty()判断了,否则即使传递过来了0、'0'都会被当作没有传递任何值过来。
而对于可以确定传递过来的值一定不为0、'0'、空的时候,如用户名、密码等,使用!empty() 性能更优越。