繁体   English   中英

Codeigniter表单验证回调函数中的Is_Array问题

[英]Is_Array Issue In Codeigniter Form Validation Callback Function

我在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条件在删除警告中的作用是什么?

当您放置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()检查,因为它只是忽略了这种情况,并且跳过了所有内置错误处理-使得调试困难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM