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行之前已引发了通知,因此,现在阻止检查为时已晚。