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

PHP中isset()函数背后的逻辑是什么?,php,isset,Php,Isset,当我在一个应用程序中编写代码时,我意外地遇到了这个问题 $ar = [ 'first' => 1, 'second' => 2, ...... ]; 当我试图检查$array中不存在的索引时 if(isset($ar['third']) && !empty($ar['third'])){ echo "Found"; }else{ echo "Not Found"; } 它工作正常,没有预期的错误,但是当我把这个条件放在公共函数中

当我在一个应用程序中编写代码时,我意外地遇到了这个问题

$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";
}
上面的示例抛出了一个异常未定义的索引错误,有人能解释为什么这会导致错误。

$value总是被设置的,因为它被声明为函数参数,所以它总是存在。所以在这种情况下,使用isset是没有意义的

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

您正试图引用$ar数组,在实际执行isset/empty检查之前的“第三个”索引处,因为这在sanitise函数中


因此,PHP显示了ifsanitize$ar['third']{line的错误。

也就是说,这个问题是一个简单的输入错误。1.sanitize是这个函数的一个坏名字,因为它没有清理任何东西。只是说,希望这只是一个示例。2.isset&&!empty是多余的。3.如果$ar['third']在这里不存在:sanitize$ar['third'],您不能期望函数中的代码会抑制该错误。@deceze是的,这只是一个示例。要记住的关键是isset不是一个函数,而是一个特殊的语言构造。因为它的目的是检测未初始化的变量、数组元素或对象属性,所以它绕过了at将引发通知。但是在您的代码中,在到达isset行之前已引发了通知,因此,现在阻止检查为时已晚。