empty与isset

用isset用的比较多是在判断$_POST/$_GET...数组有没有指定的key。就是说$_GET/$_POST['key']有没有被赋值。

 
第一种情况:
如果一个变量没被赋值,只声明,php是不鸟的,并没有像其他语言会弄一个null或者其他的随机数。那么,如果直接用,就会出现notice的错误。
 
例如:
<?php
$a;             //php是不鸟的
echo $a;     //报出notic错误,当然,你可以忽略。
?>
 
数组也是同样道理
如果压根以前没赋值过,直接echo $_arr['a'];(非赋值语句),也会报出notice。
 
这两种情况isset()和empty()都可以检测出来,当然,用isset比较多。所以在传数组,$_POST,一定要用isset检测。
 
第二种情况:
如果赋值,但赋值为null
怎么说也是赋值了,所以php还是会鸟的。这时候直接echo 不会报错,只会一片空白而已。
这种情况isset()和empty()都能检测出来,大家都认为是没有东西。
isset()返回false,
empty()返回true
 
第三种情况:
如果赋值,但是赋值了空字符串,''或者"",php也会鸟,只要赋值了就会鸟
isset检测跟empty就不一样
isset()检测是true,就是isset认为是有东西的
empty()赋值为true,就是empty认为是没东西的
 
还有:
空格,空字符串,0,字符0,空数组,empty都会认为它们是没东西。
 
总结一下:
1、只声明,没有赋值的变量、数组元素,php不会为它们分配随机数,连null都不分配(如果声明了null就不报错)。所以,数组使用之前一定要用isset()/empty()检测,通常用isset检测比较多
 
2、isset比较简单朴实,什么才是isset认为是没东西呢?一、没有赋值的变量。二、赋值了但是赋了null的变量。
 
3、empty可能蛋疼点,它认为什么东西是空呢?一、没赋值的变量。二、赋值了但赋了null的变量。前面两点是跟isset一样的!不过,空格,空字符串,0,字符0,空数组,empty都会认为它们是没东西。
 
所以,empty它认为空的范围大很多...略霸道,我们还是要慎用。因为连0都认为是空,太不合理了。空字符串用isset检测不出来,那我宁愿用直接比较===,或者==也行。
 
 
 
还说一点,函数传参问题
如果函数定义了一个参数,如下
function foo($a) {
     echo $a;
}
 
如果调用的时候,直接foo();  (人性化嘛,如果我不想传值,还要我foo('')传一个空字符串吗?累赘!老子直接不传不可以?)
会报两个错,第一,忘了传参,第二,$a没赋值就使用
第二个错可以用一个isset()检测得出来,跟只声明,没赋值一样
但是第一个错误就没法用isset检测屏蔽了。
 
我们不想在调用的时候赋值,不想给参数,但又不想foo(''),我们可以用默认值
function foo($a = '') {
     if($a == '') {
          todo
     }
}
 
这样的话,可以同时解决两个错误。
好处:不用检测参数有没赋值,就是不用isset()了。对于空的东西不用在调用的时候传参赋值!
 
注意:多个参数的时候,有默认值得参数都安排在后面。
 
 还有一个用得比较多:判断是否空数组array(),用empty

posted on 2013-03-13 11:25  bgwan  阅读(186)  评论(0)    收藏  举报

导航