PHP中的isset()函数背后的逻辑是什么?

时间:2018-10-09 12:20:32

标签: php isset

在一个应用程序中编写代码时,我偶然遇到了这个问题。

$ar = [
   'first' => 1,
   'second' => 2,
   ......
]; 

当我尝试检查$array中不存在的索引时

if(isset($ar['third']) && !empty($ar['third'])){
    echo "Found";
}else{
    echo "Not Found";
}

它正常工作,没有出现预期的错误,但是当我将此条件放到通用函数中然后进行检查

function sanitize($value){
   if(isset($value) && !empty($value)){
       return true;
   }else{
       return false;
   }
}

if(sanitize($ar['third'])){
   echo "Found";
}else{
   echo "Not Found";
}

以上示例引发了一个未定义的异常索引错误,有人可以解释为什么这导致了错误。

2 个答案:

答案 0 :(得分:1)

始终设置

$value是因为它被声明为函数参数,因此它始终存在。因此,在这种情况下,使用isset()是没有意义的。

function sanitize($value){ // <-- Variable is declared so it exists 
                           // within the scope of this function

答案 1 :(得分:1)

您试图在实际执行isset / empty检查之前(因为$ar函数中)在'third'索引处引用sanitise数组。

PHP因此显示if(sanitize($ar['third'])){行的错误。