我的codeiginter表单验证规则中包含以下回调函数:
function validate_milestone($mileStones, $csrf) {
if(is_array($mileStones)) {
foreach ($mileStones as $value) {
}
}
}
这是var_dump
array (size=3)
0 =>
array (size=3)
'Name' => string 'a' (length=1)
'Amount' => string '50.00' (length=5)
'Type' => string 'AMOUNT' (length=6)
1 =>
array (size=3)
'Name' => string 'b' (length=1)
'Amount' => string '20.00' (length=5)
'Type' => string 'AMOUNT' (length=6)
2 =>
array (size=3)
'Name' => string 'c' (length=1)
'Amount' => string '30.00' (length=5)
'Type' => string 'AMOUNT' (length=6)
如果我从上面的代码中删除if(is_array())
条件,那么PHP会返回警告" 为foreach提供的无效参数"。当我使用var_dump($mileStones)
时,它给出了数组类型的变量。那么这个PHP条件在删除警告中的作用是什么?
答案 0 :(得分:0)
当您放置is_array()条件时,只有当$ mileStones不是数组时才会跳过代码块(在某些情况下会由于您未在此处共享的代码的其他部分而导致)和因此,foreach语句永远不会被执行并被跳过(因此没有警告):
if(is_array($mileStones)) {
echo 'This entire block is skipped when $mileStones is not an array.';
foreach ($mileStones as $value) {
}
}
现在当你删除is_array()检查时,无论如何都会执行foreach循环,并且$ mileStones 不是数组或者是空数组在某些情况下,内置警告被扔了。试试这个确认:
if (is_array($mileStones)) {
foreach ($mileStones as $value) {
}
} else {
echo 'Damn, $mileStones is indeed not an array in some weird cases that I need to check now.';
}
注意:在我看来,你不应该使用is_array()检查,因为它只是忽略了这种情况,所有内置的错误处理都被忽略了 - 使调试变得困难。